crontab 定时运行python脚本失败

有一个python脚本,想用crontab 定时运行,但是运行失败,不清楚什么原因。

追加2:
可能和chrome和chromedriver有关系,我把这两个放在/home/用户名/opt/bin文件夹下,/opt/bin文件夹是我自己在用户名主目录下建的文件夹,专门放一些自己安装的bin程序什么的,/home/用户名/opt/bin写入zshrc文件,平时使用没有问题,不是标准的系统目录。但是我把这两个文件复制到标准的/usr/bin下面之后,还是不行。

追加1:
通过打印输出,发现是py脚本里面driver语句的问题,涉及到driver的语句,都不行
但是这个py程序在shell里面运行很好
写了一个最简单的py程序,用crontab -e加入的命令也可以把py脚本跑起来

原文:

crontab -e加入的命令是:

* * * * * /home/xxx/anaconda3/bin/python3.9 /media/xxx/data/biofile/script/python-script/xxx-login-v1.py

python脚本是:

# -*- coding: utf-8 -*-
#!/usr/bin/env python3.9

import sys
import requests
import json
from selenium import webdriver
import time
import warnings

warnings.filterwarnings("ignore")

option = webdriver.ChromeOptions()
#option.headless = True
driver = webdriver.Chrome(options=option)
driver.implicitly_wait(5) # seconds
driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
  "source": """
    Object.defineProperty(navigator, 'webdriver', {
      get: () => undefined
    })
  """
})


driver.get('http://1.1.1.2/ac_portal/default/pc.html?template=default&tabs=pwd&vlanid=0&_ID_=0&switch_url=&url=https://www.baidu.com&controller_type=&mac=00-15-c7-e1-d0-00')
#driver.get('https://www.baidu.com')
time.sleep(5)
driver.find_element_by_id("password_name").send_keys("1234")
driver.find_element_by_id("password_pwd").send_keys("5678")
driver.find_element_by_id("rememberPwd").click()
time.sleep(5)
driver.find_element_by_id("password_submitBtn").click()

export DISPLAY=:0

查查 /var/log/cron 日志,看看运行这个PY时的日志报错是什么。

看看日志报什么错误。检查下python命令和脚本的绝对路径是否正确。

1、先试着运行一下脚本,看看是不是报错
2、检查一下crontab能否正常运行

首先确认下webdriver相关类是否导入成功,并命令行测试下对应的13、15、16、17行等代码能否执行成功,如果还是不行重装下chrome试试

可以导出下错误日志

15 15 * * 4 python /home/*/test.py >> /home/*/error.log 2>&1

建议用shell写个调用测试一下,看看哪里出了问题,

你的selenium 是否指定了webdriver的路径

from selenium import webdriver
path = "/path/to/chromedriver"# 注意这个路径需要时可执行路径(chmod 777 dir or 755 dir)
driver = webdriver.Chrome(executable_path=path, chrome_options=chrome_options)
 
def chrome_options(cls):
    mobile_emulation = {        "deviceMetrics": {"width":375, "height": 667, "pixelRatio": 2.0},        "userAgent":"Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30"        }
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_experimental_option("mobileEmulation", mobile_emulation)
    return chrome_options