conocode
このコード
トラブルシューティング

crontab で Let’s Encrypt の証明書更新設定→実行されない

crontab に Let’s Encrypt の証明書更新コマンドを設定したのに、指定された時刻になっても更新されないんですけど
crontab で実行すると遅延が設定されてすぐには実行されないよ

Let’s Encrypt の証明書を自動更新しようとcrontab に更新処理を記載しました。

まずはちゃんと動くかどうかテストしたかったので1分後に発火するように以下のように crontab に記載して実行を待ちました。

31 6 * * * certbot renew -q –no-self-upgrade –post-hook “service httpd reload”

指定した時刻になったので証明書を確認してみるも、更新された気配がありません

ログを確認すると以下のようなメッセージが出力されていました

Cert is due for renewal, auto-renewing…
Non-interactive renewal: random delay of 128.91911181737714 seconds

どうやら対話型処理でない場合は遅延時間が設定されてすぐには実行されないようです。
上記のメッセージの場合は約129秒後に実行されることとなります。

なぜこのような仕様になっているかというと、推測ですが、みんなが0時ちょうどに
Cron で証明書を更新しようとすると、Let’s Encrypt のサーバが0時にエライことに
なってしまうので負荷を分散させる目的で遅延をいれているものと思われます。

ですので、証明書を自動更新させようとして、cron を設定しテストしてみても
遅延時間によっては一向に証明書が更新されないので悩むことになります。

プロセスがまだ残っていれば実行中(スリープ中)ですので、プロセスがなくなるまで
待ちましょう。

/var/log/letsencrypt/letsencrypt.log
を確認すれば遅延時間がわかると思います。
あまりに長い遅延時間であれば、一度プロセスを終了させてから再度実行させると
良いかもしれません。