====== certbot renewでApacheがCPU 100%に張り付くでござるの巻き ======
SSL証明書の期限が切れた状態で''certbot renew''を行うと、ApacheプロセスのCPU利用率が100%となりハング状態になるっぽい。''apachectl''で止めようとしても(弊鯖はご存じのとおりFreeBSDなので''service apache24 stop''だが)、応答が返ってこずkillせざるを得ないという状況。環境は以下のとおり。
* FreeBSD 13.0-RELEASE-p4
* Apache 2.4.51
* certbot 1.21.0
* certbot-apache 1.21.0
* Python 3.8.12
* webrootモードで運用
''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に認識されてないのが原因な気がする。
[[https://forums.freebsd.org/threads/have-to-restart-apache-after-certbot-renew.73231/#post-447416|FreeBSDフォーラムの投稿]]のように、証明書更新後のフックスクリプトでリロードしてやれば解決しそうな気がする。
#!/bin/sh
service `echo $0|sed -e 's/.*\/\(.*\)_\(.*\).sh/\2 \1/'`
パッと見「なんじゃこりゃ?」ってシェルスクだが、自身のファイル名をsedで切り出し''service apache24 reload''を実行するという、実に巧妙な仕組みだ。引用元のフォーラムでは、同様にdovecotやpostfixの証明書更新も行っていた。中身同じでファイル名を変えればいいだけとは、よく思いつくものだ。
===== 参考サイト =====
* [[https://community.letsencrypt.org/t/apache-running-at-100-certbot-unable-to-renew-certificate/32576|Apache Running at 100% - Certbot Unable To Renew Certificate - Help - Let's Encrypt Community Support]]
* [[https://github.com/certbot/certbot/issues/7998|"Could not find ssl_module; not disabling session tickets." · Issue #7998 · certbot/certbot · GitHub]]