Syslogによって収集されたログをローテーションするように構成されたlogrotateスクリプトがあります。そのスクリプトの一部は、syslogプロセスをリロードすることです。問題は、syslogのリロードがローテーションする一致するログファイルごとに実行され、約100個あることです。すべての個々のログが処理された後、syslogプロセスを1回だけリロードするようにlogrotateスクリプトを設定するにはどうすればよいですか?
/logs/* {
daily
rotate 7
compress
postrotate
/etc/init.d/syslog-ng reload 2>/dev/null
endscript
}
使用sharedscripts:
通常、logrotateは、ログをローテーションするたびにpostrotateスクリプトを実行します。これは、同じ構成ブロックを使用する複数のログにも当てはまります。たとえば、アクセスログとエラーログの両方を参照するWebサーバー構成ブロックは、両方をローテーションする場合、ローテーション後のスクリプトを2回実行します(ローテーションされたファイルごとに1回)。両方のファイルがローテーションされると、Webサーバーは2回再起動されます。
Logrotateがすべてのログに対してそのスクリプトを実行しないようにするには、次のコマンドを含めることができます。
sharedscriptsこのコマンドは、postrotateスクリプトを実行する前に、その構成ブロックのすべてのログをチェックするようにlogrotateに指示します。ログの一方または両方がローテーションされる場合、ローテーション後のスクリプトは1回だけ実行されます。ローテーションされたログがない場合、ローテーション後のスクリプトは実行されません。
/logs/*
^^^ワイルドカードは* .gzファイルとも一致しており、実際に気になるファイルに加えてそれらをローテーションしています。一致するルールを調整して、関心のあるファイルのみを含めると、すべて設定されているはずです。