SSL証明書の期限が切れた状態でcertbot renew
を行うと、ApacheプロセスのCPU利用率が100%となりハング状態になるっぽい。apachectl
で止めようとしても(弊鯖はご存じのとおりFreeBSDなのでservice apache24 stop
だが)、応答が返ってこずkillせざるを得ないという状況。環境は以下のとおり。
weekly_certbot_enable
でもって週次で証明書の確認&更新が行われるはずなのに、なんで切れてるの?そもそも期限切れになったからと言って、なんでhttpdがハング状態になるの?と疑問は尽きないのだが、ひとまず脇に置いといて、この状況に陥ったらcertbot certonly
を使って手動で証明書を更新してやる。
# certbot certonly --webroot -w /path/to/document_root -d example.com
証明書更新後、certbot renew
でhttpdが暴走しないことを確認する(renewが正常に終われば暴走はしてない。)
それにしても原因は何なんだろうなー。以前、同様の状況が発生した時は、apacheやモジュールの更新を行っていたのでバイナリ間の何らかの不整合くらいで流したが、たぶん今回と同じ原因だったんだろう。さらにその以前は正しく動いていたような気がしなくもない(結構期限切れをやらかしていたので確証が持てない)ので、よくわかりません。
詳しい方教えてください。
(2021-12-24 追記)
確証はないけど、証明書更新後にapache reloadをしておらず、新しい証明書がapacheに認識されてないのが原因な気がする。
FreeBSDフォーラムの投稿のように、証明書更新後のフックスクリプトでリロードしてやれば解決しそうな気がする。
#!/bin/sh service `echo $0|sed -e 's/.*\/\(.*\)_\(.*\).sh/\2 \1/'`
パッと見「なんじゃこりゃ?」ってシェルスクだが、自身のファイル名をsedで切り出しservice apache24 reload
を実行するという、実に巧妙な仕組みだ。引用元のフォーラムでは、同様にdovecotやpostfixの証明書更新も行っていた。中身同じでファイル名を変えればいいだけとは、よく思いつくものだ。