单纯的使用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已完美被记录。