web-dev-qa-db-ja.com

logrotate構成ファイルのワイルドカード設定からの例外を指定するにはどうすればよいですか?

私のログファイルでは、1つ(またはいくつか)を除くすべてのファイルが同じ構成を使用しているが、残りのファイルには別のファイルがあるという問題があります。すべてのファイルに一般的な構成を与え、後でいくつかの特定のファイルに対してこの構成を上書きすることでこれを実現しようとしました:

/var/log/mylogs/*.log {
                   size 1000k
                   copytruncate
                   create 0644 root root
                   rotate 99
                   compress
                   missingok
}

/var/log/mylogs/thatonespecial.log {
                   size 1000k
                   copytruncate
                   create 0644 myuser mygroup
                   rotate 99
                   compress
                   missingok
}

ただし、これによりエラーが発生します。

error: /var/log/mylogs/logrotate.conf:10 duplicate log entry for /var/log/mylogs/thatonespecial.log

このような状況を適切に処理するにはどうすればよいですか?確かに、多数の標準ログファイルを個別にリストしたくないので、ワイルドカード構成を使用するのは理にかなっています。しかし、どうすればワイルドカードファイルの例外を指定できますか?

9
MRA

最もエレガントな答えはthatonespecial.log別のディレクトリにあるため、ワイルドカードを照合できません。

それが機能しない場合は、 globs を使用してワイルドカードを絞り込むことができます。面倒ですが、ファイルの場所を移動できない場合は、おそらくこれが唯一の選択肢です。このようなもの:

/var/log/mylogs/[!t][!h]*.log

名前に「th」で始まらない2文字以上の.logファイルと一致します。

8
Hyppy

ルールの上書きが実装され、現在は機能しているようです。

$ logrotate --version
logrotate 3.8.7

$ cat /etc/logrotate.d/test
# rotate application logs for 40 days by default
/home/myapp/log/*.log
/home/myapp/log/*/*.log
{
    daily
    compress
    delaycompress
    rotate 40
}

# rotate access logs for 1 year
/home/myapp/log/access/*.log {
    daily
    compress
    delaycompress
    rotate 365
}

$ logrotate  -d /etc/logrotate.d/test
reading config file /etc/logrotate.d/test

Handling 2 logs

rotating pattern: /home/myapp/log/*.log
/home/myapp/log/*/*.log
 after 1 days (40 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.

rotating pattern: /home/myapp/log/access/*.log  after 1 days (365 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.

ローカルのlogrotate(バージョン3.7.8)でテストすると、エラーが発生しました。

$ cat logr.conf 
# rotate application logs for 40 days by default
/home/myapp/log/*.log
/home/myapp/log/*/*.log
{
    daily
    compress
    delaycompress
    rotate 40
}

# rotate access logs for 1 year
/home/myapp/log/access/*.log {
    daily
    compress
    delaycompress
    rotate 365
}

$ logrotate -d logr.conf 
reading config file logr.conf
reading config info for /home/myapp/log/*.log
/home/myapp/log/*/*.log

error: logr.conf:12 duplicate log entry for /home/myapp/log/access/api_access.log
error: found error in /home/myapp/log/access/*.log , skipping
removing last 1 log configs

...
4
Ikar Pohorský

すべてのログの名前がわかっている場合は、1つのルールでそれらを一緒に指定することもできます。

/var/log/mylogs/{file1,file2,file3,file4,file5}.log {
    size 1000k
    copytruncate
    create 0644 root root
    rotate 99
    compress
    missingok
}

/var/log/mylogs/thatonespecial.log {
    size 1000k
    copytruncate
    create 0644 myuser mygroup
    rotate 99
    compress
    missingok
}
1