关于crontab运行脚本时报错KeyError: 'PATH'

发布时间 2023-10-17 11:12:35作者: 童年的回忆

最近在服务器上为let's encrypt证书添加自动续签计划任务时,发现总是不成功,但手动执行该计划任务所对应的sh脚本则没问题,这让我怀疑crontab执行时可能缺少了点什么导致的,想追踪一下crontab的执行日志,发现并没有,需要手动修改配置文件打开:

sudo vim /etc/rsyslog.d/50-default.conf
cron.*  /var/log/cron.log #将cron前面的注释符去掉
sudo service rsyslog restart   #重启rsyslog
sudo service cron restart     #重启cron程度

启动后,查看发现计划任务执行了,但并没有错误日志,

 尝试手动为计划任务追加日志:

 运行后,发现日志文件确实有错误:

 代表crontab在运行时,没有读取到环境变量,为crontab添加环境变量:

crontab -e //编辑计划任务

SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin/:usr/bin 40 2 17 * * /usr/bin/sh /home/xxx/htdocs/www.xxx.com/crontab.sh>a.log 2>&1

再次触发计划任务后,发现已经执行成功,但不是立即成功,而是有个sleep时间,到了时间就会自动更新:

 完成!