このようなlogrotate構成ファイルがある場合
# matches multiple ones
/var/log/project/*.log {
...
prerotate
...
endscript
...
}
では、ここでglobはどのように機能しますか?このパターンに一致するログファイルが3つある場合、事前回転スクリプトは3回実行されますか、それとも1回だけ実行されますか?何の手がかりも見つかりませんでした。logrotate (8)
答え1
それは価値があるので、logrotateman 3 glob
はで利用可能なglob.h(参照:)を使用しますman 7 glob
。多くの点でbashワイルドカード(拡張ワイルドカードなし)と似ていますが、まったく同じではありません。特に、これは以下をサポートすることを意味します。
? match a single character
* match any string, including the empty string
[...] match any of the listed characters
[a-z] match a range of characters
[!...] match any but the listed characters
[:xx:] match various character classes, like [:digit:], [:blank:], etc.
ワイルドカードは、パスの各コンポーネントに個別に適用されます。たとえば、複数のホストからログを収集するrsyslogサーバーがある場合は、次のようにlogrotateセクションを使用できます。
/var/log/host/*/*/syslog {
rotate 5
...
}
答え2
一致するファイルごとに1回、3回実行されます。マニュアルページにヒントがあります。
sharedscripts
Normally, prerotate and postrotate scripts are run for each log which is rotated and the absolute path
to the log file is passed as first argument to the script. That means a single script may be run multi-
ple times for log file entries which match multiple files (such as the /var/log/news/* example). If
sharedscripts is specified, the scripts are only run once, no matter how many logs match the wildcarded
pattern, and whole pattern is passed to them. However, if none of the logs in the pattern require
rotating, the scripts will not be run at all. If the scripts exit with error, the remaining actions will
not be executed for any logs. This option overrides the nosharedscripts option and implies create
option.
しかし、もちろん、どこを見るべきかを知っている場合にのみ、これを知ることができます。 (また実験的に検証してみましたlogrotate -v
;))