Encryptの認証を得ていて、毎週月曜日のバッチで更新チェックをやっている。Encryptの認証は3か月で切れてしまうので、期限のチェックと更新は大事なルーチンなのだ。お約束というかなんというか、当サイトは3か月目の最初の更新に失敗し5時間ほど不通だった。Encryptの更新バッチは割にシンプルで、失敗する要素はあまりない。なんで失敗するのかよく分からないので原因を突き詰めることにした。certbotは/var/log/letsencryptディレクトリにログを残してくれるので、これをチェックすればよい。見てみるとこんな記述があった。Skipping.なんか、nginxが見つからないと文句を言っている。実はcertbotは、コマンドラインから起動すると問題なく動く。renewと起動してもちゃんと動く。思って、起動スクリプトの方を見直すことにした。certbotの起動時には、/etc/cron.d/certbot-renewというファイルからこんな風に起動している。local0.infoここでは環境変数PATHには何も指定していないので、おそらくデフォルトの非常に短いPATHしか通っていないのだろう。いうひどいありさまだった。これではどうしようもないので、nginxにPATHが通るように次のように指定してみた。local0.info--dry-runをつけてテストしたところ問題なく動作したので、これでOKのようだ。Apacheはどうなの?さて環境変数の問題となると、これまで運用してきた他のサイトはどうやねん、というのが気になる。Encryptで運用しているHTTPSサイトは他にもあり、そちらでは問題なく更新できているからだ。違いと言えばそちらはApacheで運用しているということぐらいだ。いうわけでそちらのサイトのログもチェックしてみよう。/usr/sbin:/usr/local/bin:/usr/local/sbinというわけでApacheも似たようなエラーを出していた。Apacheのプラグインはapachectlなしでも認証を続けてくれるようで、証明書の更新自体はちゃんと終わっていた。いうことでこちらにもちゃんとPATHを設定しておくことにした。ひとつ、今回certbotのログを読んでわかったのがこれ。secondsこれまで、管理しているサイトごとに色々工夫してランダムな時刻を設定していたのだが、意味がないことが発覚したので、管理の意味も込めてなるべく統一コードで済ませるようにしていきたいと思う。あと、本来ならrenewに失敗したときにうまくhookしたいのだが、今のところいい知恵が浮かばないので、別の機会にネタにしたい。