CentOS 7.9下Crontab定时任务执行Python脚本失败:工作目录问题及解决方案
本文探讨在CentOS 7.9系统中,使用Python 3.8.6虚拟环境运行脚本时,crontab定时任务执行失败的问题。 手动运行脚本正常,但crontab任务却报错FileNotFoundError: [Errno 2] No such file or directory: 'report.json'
以及browsermobproxy.exceptions.ProxyServerError: can't connect to browsermob-proxy
。此外,还出现allure: command not found
警告,但这不影响核心功能。
问题根源在于crontab任务的工作目录。crontab默认工作目录是用户主目录,而非脚本所在目录。因此,脚本无法在主目录找到运行时生成的report.json
文件。
解决方案:明确指定脚本工作目录
修改crontab命令,在执行Python脚本前,使用cd
命令切换到脚本所在目录:
0 8,15,21 * * * cd /home/lawrence/workcode/Auto_Cashier && ./venv/bin/python3 run_case.py
此命令先将工作目录切换到/home/lawrence/workcode/Auto_Cashier
,再执行run_case.py
脚本。 这样,脚本就能正确访问report.json
文件。
其他错误排查:
browsermobproxy.exceptions.ProxyServerError: can't connect to browsermob-proxy
: 此错误与网络连接或browsermob-proxy服务有关,需要单独排查网络配置和browsermob-proxy服务状态。
allure: command not found
: 此警告表示系统未安装allure测试报告生成工具。 如果不需要allure报告,可以忽略此警告。
用户提供的shell脚本方法本身没有问题,但由于工作目录设置错误,导致了同样的FileNotFoundError
。 通过明确指定工作目录,就能有效解决此类crontab定时任务执行失败的问题。