最近logrotateでapacheが落ちるようになりました。対策は、目次の
1、「状況」はスルーして
2、「apacheを再起動しないでlogrotateをする」へお進みください。(2025.01.25追記)
状況
先日、夜中にapacheが落ちました。
logrotateの際のgracefulに問題があるようで、error.logを残しておけば良かったのですが、rotate 4は短すぎました。その後は落ちることなく動作しています。しばらくは様子見とします。
現行の設定ファイル
# ee /usr/local/etc/logrotate.d/apache24
/var/log/httpd-error.log
/var/log/httpd-access.log {
daily
rotate 4
create
nocompress
missingok
sharedscripts
postrotate
/usr/local/etc/rc.d/apache24 graceful
endscript
}
様子見用に少し変更
# ee /usr/local/etc/logrotate.d/apache24
/var/log/httpd-error.log
/var/log/httpd-access.log {
daily
rotate 12
create
nocompress
missingok
sharedscripts
postrotate
service apache24 graceful
endscript
}
rotate 4をrotate 12に変更。
/usr/local/etc/rc.d/apache24 gracefulを自分で解りやすくservice apache24 gracefulに変更。
gracefulをrestartにすれば多分落ちないんだろうと思います。
create | ローテーション後に空のログファイルを作成 |
nocompress | ローテーションしたログを圧縮しない |
missingok | ログファイルがなくてもエラーを出さずに実行 |
sharedscriots | 複数指定したログファイルに対してpostrotateやprerotateで指定したコマンドを実行 |
postrptate~endscript | 間に指定したコマンドをローテーション後に実行 |
apacheを再起動しないでlogrotateをする
再起動させないでrotateする方法を探してみると、copytruncateというオプションがあるようです。
copytruncateとは
ログファイルを切り詰めずにそのままの状態でコピーし、同じ名前の新しいログファイルを作成するためオリジナルのファイルへの書き込みは中断されないとのことです。(この解釈であっているのでしょうか?)
ということなので、再起動の部分を消してcopytruncateを追記しました。
# ee /usr/local/etc/logrotate.d/apache24
/var/log/httpd-error.log
/var/log/httpd-access.log {
daily
rotate 12
create
nocompress
missingok
notifempty
copytruncate
}
notifempty | ログファイルが空ならローテーションしない |
今後様子見で、頻繁に落ちるようなら対策案を試してみようと思います。
logrotateでapacheが落ちるようになりましたので ↑ に変更しました。(2025.01.25追記)
httpd-error.log の内容(2025.01.25追記)
落ちた時のログ。
[mpm_prefork:notice] [pid 1477] AH00171: Graceful restart requested, doing restart
再起動した時のログ
[core:warn] [pid 17080] AH00098: pid file /var/run/httpd.pid overwritten − − Unclean shutdown
of previos Apache run?
[mpm_prefork:notice] [pid 17080] AH00163: Apache/2.4.62 (FreeBSD) OpenSSL/3.0.13 configured
− − resuming normal operations
[core:notice] [pid 17080] AH0094: Comand line: ‘/usr/local/sbin/httpd -D NOHTTPACCEPT’
前回のpidファイルが残っていたので上書きしました。という内容で、正常に起動すれば特に問題ないようです。