【问题标题】:Renew certificates by running script as cronjob通过将脚本作为 cronjob 运行来更新证书
【发布时间】:2018-02-04 21:00:31
【问题描述】:

我需要更新我的 Let's encrypt 证书,我这样做是这样的:

$ sudo docker stop nginx
$ sudo docker run -it --rm -p 443:443 --name certbot -v /etc/letsencrypt:/etc/letsencrypt -v /var/log/letsencrypt:/var/log/letsencrypt quay.io/letsencrypt/letsencrypt:latest renew
$ sudo docker start nginx

我经常运行这些命令,所以我想创建一个 cronjob。到目前为止,我创建了这个文件:

$ sudo nano /opt/letsencrypt.sh 

包含以下内容:

#!/bin/sh
sudo docker stop nginx
sudo docker run -it --rm -p 443:443 --name certbot -v /etc/letsencrypt:/etc/letsencrypt -v /var/log/letsencrypt:/var/log/letsencrypt quay.io/letsencrypt/letsencrypt:latest renew
sudo docker start nginx

将此文件添加到我所做的 cronjobs 中:

$ sudo nano /etc/crontab

5 8 * * 6   root /opt/letsencrypt.sh

但是什么都没有发生。没有错误,没有行动。我做错了什么?

如果可以记录作业会很棒,这样我就可以看到它何时运行...

【问题讨论】:

  • 确保您的脚本具有执行权限(chmod +x /opt/letsencrypt.sh)。您是否尝试从提示符运行脚本?它有效吗?在 /var/log/syslog (或您的发行版的其他系统日志)中,您可以找到 crontab 是否运行了您的脚本。您可以将 stdout / stderr 重定向到一个文件以详细了解会发生什么。

标签: shell ubuntu cron


【解决方案1】:

确保在 crontab 内运行 docker run 时不要使用 -it

错误:

0 3 * * * docker run -it --rm --name certbot ...

正确:

0 3 * * * docker run --rm --name certbot ...

您还可以将输出记录到日志文件中:

0 3 * * * docker run --rm --name certbot ... > /tmp/cronjob.log 2>&1

这会将标准输出 [1]> 和错误 2> 记录到该文件中。

【讨论】:

    【解决方案2】:

    您是否使脚本可执行?

    如果没有,请尝试chmod +x /opt/letsencrypt.sh

    【讨论】:

    • 只需输入/opt/letsencrypt.sh。如果您收到permission denied 错误,很可能您的脚本(还)不可执行。
    • 好的,手动运行正常。希望现在 cronjob 也在运行同样的事情。
    猜你喜欢
    • 2015-11-08
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 1970-01-01
    相关资源
    最近更新 更多