问题: 最近在项目中遇到crontab中定时执行python脚本不生效,但是手动直接运行python脚本能够正常执行。
系统环境: centos7
python安装路径:/root/anaconda3/bin/python
python脚本:/data/test/sftp.py
crontab中添加定时任务:0 * * * * python /data/test/sftp.py
问题原因:
主要是crontab的运行目录和py脚本运行目录不一样(直接执行和通过任务执行,程序的执行环境不同),更改python脚本头的目录,直接指定当前系统中Python的目录:!/root/anaconda3/bin/python,具体根据自己的目录更改查看python的安装目录(可以用 which python 命令进行查看)
若以上设置了依旧执行不成功,可以尝试下面的方式执行python:
0 * * * * cd /data/test/ && /root/anaconda3/bin/python sftp.py
方法二:可以通过在 /etc/cron.d 下新建一个文件,去指定定时任务执行目录的方式去设置定时任务。
如,在 /etc/cron.d/ 下新建一个 sftp_py 的文件,内容如下:
SHELL=/bin/bash
PATH=/root/anaconda3/bin
MAILTO=root
HOME=/data/test
0 * * * * root python sftp.py