マンページでは私の質問に答えてくれないし、強制的に回転サイクルを回すのも嫌なので、ここで質問することにしました
logrotateのmanページには、以下のような例が記載されています
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail www@my.org
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
ワイルドカードが付いている例はすべて1つの項目しか含まれていません。さて、気になるのは、これも許されるのかどうかということです
/var/log/httpd/*.log /var/log/httpd/*/*.log {
# ... same as above
}
これが理由です。私は複数のバーチャルホストを持っていて、それらのバーチャルホストを「所有している」ユーザによって分割しています。ログファイルは世界で読めるので、フォルダをユーザのホームディレクトリにバインドしたいのですが、 ユーザが「所有している」ログファイルに限定したいのですが、これはログをフォルダに分離することで最も簡単に達成できます (そして、バインドマウントはいずれにせよそのスキームを必要とします)。そこで、私は/var/log/httpd
以下のログファイルと、そのディレクトリのサブディレクトリにあるすべてのログファイルの両方を回転させるソリューションを探しています
一般的に、複数のエントリがワイルドカードルールで全く可能なのか、それともフルパスでのみ可能なのかについては、マニュアルページでは手がかりがありません。私は Debian “Squeeze” に付属の logrotate バージョン 3.7.8-6 を使用していますが、これは必ずしもディストロやプログラムのバージョンに特有のものではないと思います
89 0xC0000022L 2011-03-10
はい、複数のワイルドカードを使うことができます。これを行うことで、実際の回転を行わずにファイルをテストすることができます
logrotate -d -f /etc/logrotate.conf
-d = デバッグモードをオンにします。デバッグモードでは、ログやlogrotateステートファイルに変更は行われません
-f = logrotateに強制的に回転させるように指示します。 これは、logrotate に新しいエントリを追加した後や、古いログファイルを手作業で削除した場合に便利な場合があります
126 Paused until further notice. 2011-03-10
はっきりさせておきたいのですが、それは私がどのようにするかを探してここに来たからです
1つの設定に対して複数のログファイルを指定することができます
/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
rotate 5
mail nobody@example.org
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
29 ThorSummoner 2017-01-18
logrotateのmanページより
ログファイル名は引用符で囲むことができることに注意してください(名前にスペースが含まれている場合は引用符が必要です)。通常のシェルのクォートルールが適用されます
シングルパターンからマルチパターンに移行する際には、引用符の修正や削除を忘れずに行ってください
This works:
/var/log/*.log /var/log/*.blog {
これも効きます
/var/log/*.log
/var/log/*.blog {
これではうまくいきません
'/var/log/*.log /var/log/*.blog' {
これもこれも
"/var/log/*.log /var/log/*.blog" {
シングルパターンの場合と比較してみてください
This works:
'/var/log/*.log' {
そして、これも効きます
"/var/log/*.log" {
logrotate 3.10.0でテストしました
8 Piotr Dobrogost 2017-03-20