关于crontab运行脚本时报错KeyError: 'PATH'
最近在服务器上为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时间,到了时间就会自动更新:
完成!