logrotateはワイルドカードをどのように処理しますか?

logrotateはワイルドカードをどのように処理しますか?

このような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;))

関連情報