一、现象
正常运行的脚本放在定时任务里却不能正常执行了
50 1 * * 4 /usr/bin/python3 /python_project/tiup_bak.py >> /python_project/logs/tiup_bak.out
二、排查与解决
因为ubuntu的cron.log不是自动开启的,所以这里需要调整下
1.编辑配置文件
vim /etc/rsyslog.d/50-default.conf
2.开启cron.log
cron.* /var/log/cron.log #将cron前面的注释符去掉
3.重启rsyslog
sudo service rsyslog restart
4.查看定时任务日志的内容
crontab[9784]: (tidb) BEGIN EDIT (tidb)
crontab[9784]: (tidb) REPLACE (tidb)
crontab[9784]: (tidb) END EDIT (tidb)
cron[1084]: (tidb) RELOAD (crontabs/tidb)
CRON[9958]: (tidb) CMD (/usr/bin/python3 /python_project/tiup_bak.py >> /python_project/logs/tiup_bak.out)
CRON[9957]: (CRON) info (No MTA installed, discarding output)
CRON[10287]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
这里No MTA installed是因为crontab执行脚本时是不会直接错误的信息输出,而是会以邮件的形式发送到你的邮箱里,这时候就需要邮件服务器了,如果你没有安装邮件服务器,它就会报这个错,这块是因为我的输出方式写错了,换成下面这么写就写
50 1 * * 4 /usr/bin/python3 /python_project/tiup_bak.py >> /python_project/logs/tiup_bak.out 2>&1
5.查看输出日志
经由上面的改动,输出日志便可以正常输出信息,所以看到了如下信息
sh: 1: aws: not found
这个就很容易理解了,要么是没有安装aws客户端,要么是代码里没有有全路径,因为crontab执行时所开启的子shell的环境变量里并没有aws的信息,所以需要写全路径,或者加全局变量,将脚本里的aws命令改写为如下全路径方式即可成功
/usr/local/bin/aws