Cron
如何驗證/修復 Certbot 續訂 cron 中的錯誤
一整天,我主要在 TLS 區域修復錯誤,但這個問題並不是專門針對 TLS 的。
好吧,我有一個帶有幾個網站的網路伺服器,每個網站都有自己的 SSL 證書。
但就這一點而言,我設法在我的 Debian 9.2 上安裝了 Certbot 版本 0.19.0,如下所示:
- 向源添加反向埠:
deb http://ftp.debian.org/debian stretch-backports main
- 從後端安裝較新版本的 Certbot:
apt-get install python-certbot-apache -t stretch-backports
之後,我不得不對續訂文件進行一些大的調整,所以看起來是這樣的:
# renew_before_expiry = 30 days version = 0.10.2 archive_dir = /etc/letsencrypt/archive/pavelstriz.cz-0001 cert = /etc/letsencrypt/live/pavelstriz.cz-0001/cert.pem privkey = /etc/letsencrypt/live/pavelstriz.cz-0001/privkey.pem chain = /etc/letsencrypt/live/pavelstriz.cz-0001/chain.pem fullchain = /etc/letsencrypt/live/pavelstriz.cz-0001/fullchain.pem # Options used in the renewal process [renewalparams] authenticator = webroot installer = apache rsa_key_size = 4096 account = c3f3d026995c1d7370e4d8201c3c11a2 must_staple = True [[webroot_map]] pavelstriz.cz = /home/pavelstriz/public_html www.pavelstriz.cz = /home/pavelstriz/public_html
在此之後,我設法更新了
pavelstriz.cz
域:certbot renew --dry-run
但讓我擔心的是每日 Certbot 的 cron:
# /etc/cron.d/certbot: crontab entries for the certbot package # # Upstream recommends attempting renewal twice a day # # Eventually, this will be an opportunity to validate certificates # haven't been revoked, etc. Renewal will only occur if expiration # is within 30 days. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
我不知道它是否真的有效或如何成功執行它?
如果我執行:
/usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
在 Bash 中,它說:
Saving debug log to /var/log/letsencrypt/letsencrypt.log The requested ! plugin does not appear to be installed
我可能誤解了這些命令。
cron 執行的實際命令是:
test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
它首先測試一些文件
test -x /usr/bin/certbot -a \! -d /run/systemd/system
翻譯成
- 確實
/usr/bin/certbot
存在並且可執行 (-x /usr/bin/certbot
)- 而不是 (
-a \!
)/run/systemd/system
存在並且是一個目錄 (-d /run/systemd/system
)如果測試成功,請等待隨機數秒 (
perl -e 'sleep int(rand(3600))'
),然後嘗試更新證書 (certbot -q renew
)。但是,在 Debian 9 上,
systemd
預設安裝,這意味著它/run/systemd/system
存在並且是一個目錄,因此初始測試失敗並且永遠不會執行更新命令。實際更新由文件中定義的 systemd 計時器管理
lib/systemd/system/certbot.timer
。從 0.27.0-1 版開始;它的內容是:[Unit] Description=Run certbot twice daily [Timer] OnCalendar=*-*-* 00,12:00:00 RandomizedDelaySec=43200 Persistent=true [Install] WantedBy=timers.target
如果 cerbot 配置正確,您可能應該找到類似的行
Nov 2 20:06:14 hostname systemd[1]: Starting Run certbot twice daily. Nov 2 20:06:14 hostname systemd[1]: Started Run certbot twice daily.
在你的
syslog
.