RHELでlogrotateがkill -HUPを使用するのはなぜですか?すべての場合に必要ですか?

RHELでlogrotateがkill -HUPを使用するのはなぜですか?すべての場合に必要ですか?

kill -HUP を使用してシステムロギングを表示します。

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

-HUPを使用することは、syslogのようなデーモンがSIGHUPをキャプチャしたときに自分自身を再起動しようとすると、開いているすべてのファイルがフラッシュされるためであることを理解しています。

なぜ更新するのか理解できません。

syslogがログファイルに新しいログのみを追加すると、開いたファイルは書き込みモードになります。この場合、ログ切り替えが発生し、ファイルシステムの古いログファイルエントリが削除された場合、新しいログ行を追加する必要があるとき(すべてのsyslogサービスがrootとして実行された後)、新しいファイルは自動的に生成されません。 ?

違いはwとuモードの理解にもっとあると思います。私はこれについて速い結論を出すことができません。

また、kill -HUPを使用してサービスを再起動しないのはなぜですか?違いがありますか?

ベストアンサー1

通常、サービスは実行中にログファイルを開いたままにします。つまり、ログファイルの名前が変更、移動、削除されても、気にせずに処理された開いたファイルに書き込みを続けます。

logrotate がファイルを移動すると、サービスは同じファイルに書き込みを続けます。

例: crond は /var/log/cron.log に書き込みます。その後、Logrotateはファイル名を/var/log/cron.log.1に変更するため、crondは開いたファイル/var/log/cron.log.1に記録し続けます。

crondにHUPシグナルを送信すると、既存のファイルハンドルを閉じて、元のパス/var/log/cron.logの新しいファイルハンドルを開き、新しいファイルを作成します。

他の信号の代わりにHUP信号を使用することは、プログラムの裁量に依存します。一部のサービス(php-fpmなど)はUSR1信号を受信し、自分自身を終了せずにファイルハンドルを再び開きます。

おすすめ記事