ログにsyslogを使用するカスタムアプリケーションがあります。今logrotateに問題があります。ログは urls.log の代わりに urls.log.1 に記録され、logrotate は回転後に url.log を生成しません。 Ubuntu 14.04 LTSサーバーを使用しています。回転後にlogrotateにurls.logを生成させるにはどうすればよいですか?
logrotate 構成 (/etc/logrotate.d/rsyslog)
/usr/local/app/log/urls.log
{
rotate 10
daily
missingok
notifempty
compress
delaycompress
sharedscripts
su app app
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
手動で urls.log.1 を urls.log に mv して force logrotate を実行すると、これが出力されます。
considering log /usr/local/app/log/urls.log
log needs rotating
rotating log /usr/local/app/log/urls.log, log->rotateCount is 10
dateext suffix '-20170228'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
switching uid to 1000 and gid to 1000
renaming /usr/local/app/log/urls.log.10.gz to /usr/local/app/log/urls.log.11.gz (rotatecount 10, logstart 1, i 10),
renaming /usr/local/app/log/urls.log.9.gz to /usr/local/app/log/urls.log.10.gz (rotatecount 10, logstart 1, i 9),
renaming /usr/local/app/log/urls.log.8.gz to /usr/local/app/log/urls.log.9.gz (rotatecount 10, logstart 1, i 8),
renaming /usr/local/app/log/urls.log.7.gz to /usr/local/app/log/urls.log.8.gz (rotatecount 10, logstart 1, i 7),
renaming /usr/local/app/log/urls.log.6.gz to /usr/local/app/log/urls.log.7.gz (rotatecount 10, logstart 1, i 6),
renaming /usr/local/app/log/urls.log.5.gz to /usr/local/app/log/urls.log.6.gz (rotatecount 10, logstart 1, i 5),
renaming /usr/local/app/log/urls.log.4.gz to /usr/local/app/log/urls.log.5.gz (rotatecount 10, logstart 1, i 4),
renaming /usr/local/app/log/urls.log.3.gz to /usr/local/app/log/urls.log.4.gz (rotatecount 10, logstart 1, i 3),
renaming /usr/local/app/log/urls.log.2.gz to /usr/local/app/log/urls.log.3.gz (rotatecount 10, logstart 1, i 2),
renaming /usr/local/app/log/urls.log.1.gz to /usr/local/app/log/urls.log.2.gz (rotatecount 10, logstart 1, i 1),
renaming /usr/local/app/log/urls.log.0.gz to /usr/local/app/log/urls.log.1.gz (rotatecount 10, logstart 1, i 0),
old log /usr/local/app/log/urls.log.0.gz does not exist
renaming /usr/local/app/log/urls.log to /usr/local/app/log/urls.log.1
running postrotate script
switching euid to 0 and egid to 0
removing old log /usr/local/app/log/urls.log.11.gz
switching euid to 0 and egid to 0
logrotateを再度強制すると、これが出力されます。
rotating pattern: /usr/local/app/log/urls.log
forced from command line (100 rotations)
empty log files are not rotated, old logs are removed
switching euid to 1000 and egid to 1000
considering log /usr/local/app/log/urls.log
log /usr/local/app/log/urls.log does not exist -- skipping ## urls.log is not creating
not running postrotate script, since no logs were rotated
switching euid to 0 and egid to 0
答え1
次のcopytruncate
オプションを使用できます。
copytruncate
一部のプログラムがそのログファイルを閉じるように指示できず、書き込みを続けることができる場合(追加)、古いログファイルを移動してオプションで新しいログファイルを作成するのではなく、コピーを作成してから元のログファイルをその場所で切り捨てます。 ) to 古いログファイルを永久に保持します。ファイルのコピーとトリミングの間の時間間隔は非常に短いため、一部のロギングデータが失われる可能性があります。 [...]
このオプションを使用すると、可能ビットを使用する必要はありませんpostrotate
。