我写了一个 letsencrypt 的自动续期脚本,手动是可以执行的 但是使用 crontab 执行不成功。
请问这是怎么回事??
这是 脚本
cd /root/letsencrypt/
./letsencrypt-auto certonly --webroot --webroot-path /usr/local/nginx/html -d hanyang.me -d www.hanyang.me --agree-tos --email [email protected] --renew-by-default
cd /usr/local/nginx/sbin/
./nginx -s reload
这是 crontab
40 12 7 * * sh /root/renew.sh
我猜: /bin/sh
需要在脚本前面加上 吗
40 12 7 * * sh /root/renew.sh > /tmp/renew.log 2>&1
之后再看 /tmp/renew.log 文件的内容
试试取消掉目录切换,都用绝对路径
/root/letsencrypt/letsencrypt-auto .....
比如这样
我一般加,然后给 chmod +x
不过应该也可以直接
40 12 7 * * /bin/sh /root/renew.sh
sh /root/renew.sh 这种方式运行,不加也没事.
我加了 可是还是不行。。。
chmod a+x renew.sh
修改 rsyslog
sudo vim /etc/rsyslog.d/50-default.conf
cron.* /var/log/cron.log cron 前面的注释符去掉
重启 rsyslog
sudo service rsyslog restart
查看 crontab 日志
less /var/log/cron.log
crontab 问题定位
查看日志
/var/log/cron.log 和 /var/mail/$user
然后把时间调一下,看一下日志输出啥来着
报这个错: An unexpected error occurred:
Bug in pythondialog: expected an empty output from u'infobox', but got: u'Error opening terminal: unknown.\n'Please see the logfile 'certbot.log' for more details.
直接 certbot renew 就可以了
很常见的问题,两个选择:
在顶部指明 PATH 环境变量:
PATH=xxx
使用绝对路径:
30 9 * * * /usr/bin/python /root/github/xxx/xxx.sh
40 12 7 * * bash -l /root/renew.sh
以 login shell 试试
我用 git bash 登陆的 是 login shell 吧 ?执行后报这个错了: mesg: ttyname failed: Inappropriate ioctl for device
An unexpected error occurred:
Bug in pythondialog: expected an empty output from u'infobox', but got: u'Error opening terminal: unknown.\n'Please see the logfile 'certbot.log' for more details.
谢谢大家的回复 我在 github 找到了[原因]( https://github.com/certbot/certbot/issues/1154)
不知道楼主解决问题了没~
我遇到一个也跟 crontab 有关的坑
记录在这了:
http://www.flyml.net/2016/11/30/crontab-java-not-found/
你这个是每月 7 号 12 点 40 分执行! 你是想要每月 7 日更新吗?
sh /root/renew.sh 不是 login shell
使用 bash -l /root/renew.sh 才是.
login shell 会自动加载 /etc/profile 等环境变量文件.
建议使用绝对路径, 一般是环境变量问题。
楼主把解决办法写一下 英文不会
40 12 7 * * . /etc/bashrc;/bin/bash /root/renew.sh
执行的时候报错会执行失败的,但是看上去像没执行一样
SHELL=/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
指令,脚本内指令,全部用绝对路径
crontab -e
增加
SHELL=/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
在最顶端
很久之前写的一个工具 https://helloacm.com/crontab-generator/
就是需要加上 --text --non-interactive 这两个 flag