使用Cron Job运行Python程序无输出无日志问题咨询
cron运行Python脚本失败的解决方案
你遇到的问题核心是cron的运行环境和手动登录的终端环境存在差异,主要集中在工作目录、环境变量两个维度,和脚本复杂度无关,不需要额外编写执行脚本也能解决,具体方案如下:
- 补全错误日志收集
你原来的cron规则只重定向了标准输出,程序运行的报错信息(标准错误)没有被收集,所以log.txt是空的。先把crontab规则修改为:* * * * * /usr/bin/python3 /home/pi/testbot/testbot.py >> /home/pi/testbot/log.txt 2>&1
修改后等待1分钟再查看log.txt就能看到具体报错,绝大多数情况是找不到db.xlsx文件的错误。 - 解决相对路径不生效问题
cron默认的工作目录是执行用户的家目录(pi用户默认是/home/pi),你代码里用相对路径db.xlsx,cron运行时会去找/home/pi/db.xlsx,自然找不到文件,两种解决方式二选一即可:- 代码里所有文件路径替换为绝对路径:把
df = pd.read_excel('db.xlsx', engine='openpyxl')修改为df = pd.read_excel('/home/pi/testbot/db.xlsx', engine='openpyxl') - 在cron任务里先切换到脚本所在目录再执行:把crontab规则修改为
* * * * * cd /home/pi/testbot && /usr/bin/python3 testbot.py >> log.txt 2>&1
- 代码里所有文件路径替换为绝对路径:把
- 确认依赖安装范围
如果你使用了虚拟环境,或者pandas、openpyxl是安装在用户级pip下,需要确认/usr/bin/python3能不能正常导入依赖:执行命令/usr/bin/python3 -c "import pandas;import openpyxl",如果没有报错就没问题,如果报错就执行/usr/bin/pip3 install pandas openpyxl给系统Python安装对应依赖。
内容的提问来源于stack exchange,提问作者MCmcoy
相关产品推荐
相关产品推荐

