centos上cron table无法执行python脚本的解决方案

单纯的使用crontab -e来写下面这条语句:

00 08 * * * python3 /home/fernando.li/mta/mta.py

结果往往是不执行,使用下面的语句查看cron table的执行日志:

sudo cat /var/log/cron

发现结果是这样的:

Oct 15 20:40:02 d-shhq-peaim-02 CROND[129796]: (fernando.li) CMD (python3 /home/fernando.li/mta/mta.py)

Oct 15 20:40:02 d-shhq-peaim-02 CROND[129797]: (CRON) EXEC FAILED (/usr/sbin/sendmail): No such file or directory

Oct 15 20:40:02 d-shhq-peaim-02 CROND[129780]: (fernando.li) MAIL (mailed 38 bytes of output but got status 0x0001#012)

即使执行了python脚本,结果往往也不是我想要的,比如我的log居然打到了用户目录里,而不是脚本中设置的mta文件夹中

centos自带的python往往是python2,但很多脚本却需要使用python3,而且你必须要用下面这条语句来找到你的package装在哪里

pip3 show xlwt

所以你需要使用下面这条语句,查找python3.7到底在哪里

whereis python3.7

再用sudo vi写一个cron_mta.sh文件:

#!/usr/bin/bash

cd  /home/fernando.li/mta

/usr/local/bin/python3.7 /home/fernando.li/mta/mta.py

看到没有,不管是python3.7的命令还是后面要执行的脚本文件名,我在sh文件中用的都是“绝对路径”!!!

这个是关键的关键!!!

不然所有的大坑都在后面等着你!!!

当然你必须要用下面这句来使它可以被执行:

sudo chmod +x cron_mta.sh

然后用crontab -e写它真正能读懂的语句,像下面这样:

00 08 * * * bash /home/fernando.li/mta/cron_mta.sh

一般有人把上面这个bash去掉,但前提是你的终端能直接运行sh文件啊,我的好像就不行,前面必须要加bash

终于,我的crontab可以忠实地执行我要求的定时任务,log.txt已完美被记录。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。