我在我的VPS上为我的root用户设置了以下cronjob。如果我以root用户运行它就可以运行命令本身。
30 2 * * * service nginx stop && /opt/letsencrypt/letsencrypt-auto renew && service nginx start > /dev/null
但是它无法正常工作,因为我看到我的SSL证书没有续订。
如果我运行cat /var/log/cron
,我可以看到以下内容
Nov 13 02:30:01 server CROND[2307]: (root) CMD (service nginx stop && /opt/letsencrypt/letsencrypt-auto renew && service nginx start > /dev/null)
这似乎表明它已经运行,但显然它还没有完成它应该做的事情。
我普通用户的其他cronjobs似乎工作正常,但我不能将该用户用于crons,因为我需要暂时停止Nginx这个cron。
关于如何进一步调试并对其进行排序的任何想法?
*编辑:*
我尝试将其运行到日志,并在日志/bin/sh: service: command not found
答案 0 :(得分:0)
问题是service
命令不在crons PATH中,所以我不得不使用/sbin/service
的完整路径。
这意味着我最后的cron命令是
30 2 * * * (/sbin/service nginx stop && /opt/letsencrypt/letsencrypt-auto renew && /sbin/service nginx start) > /dev/null 2>&1
现在正在发挥作用。
看起来作为一般规则,指定任何shell命令的完整路径是最佳做法。