logrotateでapacheが落ちる際の対策

最近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ファイルが残っていたので上書きしました。という内容で、正常に起動すれば特に問題ないようです。

タイトルとURLをコピーしました