web-dev-qa-db-ja.com

app.logではなく古いapp.log.1へのlogrotate書き込み

ロギングにsyslogを使用しているカスタムアプリケーションがあります。現在、logrotateでログがurls.logではなくurls.log.1に書き込まれ、logrotateがrotation.weの後にurl.logを作成しないという問題に直面しています。 Ubuntu 14.04LTSサーバー。ローテーション後にlogrotateにurls.logを作成させるにはどうすればよいですか?

logrotate config(/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に移動し、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
3
Shyam Jos

copytruncateオプションを使用できます。

copytruncate

古いログファイルを移動してオプションで新しいログファイルを作成する代わりに、コピーを作成した後、元のログファイルを所定の場所で切り捨てます。一部のプログラムがログファイルを閉じるように指示できず、書き込み(追加)を続ける可能性がある場合に使用できます。以前のログファイルは永久に。ファイルのコピーと切り捨ての間には非常に小さなタイムスライスがあるため、一部のログデータが失われる可能性があることに注意してください。 [...]

このオプションを使用すると、maypostrotateビットを使用する必要はありません。

1
Kusalananda