
私は、ルートファイルシステムがSDカードからマウントされる組み込みLinuxシステムを開発しています。このようなシステムの多くは/var/log
RAMディスクにインストールされていますが、重要なイベントを記録するためにSDカードにログを保存したかったので、SDカードが完全に埋まらないように通常どおりlogrotateを実行していました。
残念ながら、システムにRTC対応バッテリーがないため、システムの電源が切れて再起動すると、システム時間は1970年1月1日に戻ります。この場合、logrotateを一度実行した後、次のようにlogrotate設定を確認しましたlogrotate -d /etc/logrotate.conf
。
# logrotate -d /etc/logrotate.conf
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file syslog
reading config info for /var/log/cron /var/log/debug /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler /var/log/syslog
reading config info for /var/log/wtmp
reading config info for /var/log/btmp
error: bad year 1970 for file /var/log/syslog in state file /var/lib/logrotate.status
Handling 3 logs
rotating pattern: /var/log/cron /var/log/debug /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler /var/log/syslog weekly (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/cron
log does not need rotating
considering log /var/log/debug
log does not need rotating
considering log /var/log/maillog
log does not need rotating
considering log /var/log/messages
log does not need rotating
considering log /var/log/secure
log does not need rotating
considering log /var/log/spooler
log does not need rotating
considering log /var/log/syslog
log does not need rotating
not running postrotate script, since no logs were rotated
rotating pattern: /var/log/wtmp monthly (1 rotations)
empty log files are rotated, only log files >= 1048576 bytes are rotated, old logs are removed
considering log /var/log/wtmp
log does not need rotating
rotating pattern: /var/log/btmp monthly (1 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/btmp
log does not need rotating
error: could not read state file, will not attempt to write into it
/var/log/logrotate.status
次のように、1970年のlogrotateステータスファイルでsyslogについてひどく文句を言います。
logrotate state -- version 2
"/var/log/syslog" 1970-1-1
"/var/log/debug" 1970-1-1
"/var/log/wtmp" 1970-1-1
"/var/log/spooler" 1970-1-1
"/var/log/btmp" 1970-1-1
"/var/log/maillog" 1970-1-1
"/var/log/httpd/*_log" 1970-1-1
"/var/log/wpa_supplicant.log" 1970-1-1
"/var/log/secure" 1970-1-1
"/var/log/mcelog" 1970-1-1
"/var/log/messages" 1970-1-1
"/var/log/cron" 1970-1-1
"/var/log/vsftpd.log" 1970-1-1
最後に、ステータスファイルに書き込もうとしないことを示すメッセージが表示されるので、ログが正しく回転しないことを意味するかどうか心配されます。このようなことが起こると、ログロテートがどうなるかを知っている人はいますか?
システムが設置されているところでは停電が起こる確率が低いので時間を正確に合わせるのが良いでしょうが、障害が発生してもログロテートが壊れないようにぜひやってもらいたいと思います。
答え1
logrotate ステータスファイルは次の目的で使用されます。毎日のログが最後に回転した時期を追跡します。。私の組み込みシステムの1つでは、1970年や1907年などの偽の日付を喜んで書いているようです。ただし、次回実行すると、独自のステータスファイルの日付が拒否され、ログは回転しません。
ステータスファイルを削除してこの問題を解決しました。これは、次にlogrotateを実行するときにログを回転させる必要がないと仮定することを意味します。これは大丈夫です。
より良い解決策は、logrotate cronスクリプトを修正して、クロックがntpq / ntpdateと同期していることを最初に確認することです。実際、これをスクリプトに入れる最も簡単な方法は、check_ntp_time
標準のnagios-pluginsディストリビューションで使用することです。
/usr/lib/nagios/plugins/check_ntp_time -H pool.ntp.org
その後、logrotateの実行を許可する前に、戻りコードが0であることを確認してください。
logrotate cronスクリプトまたは起動スクリプトからntpdateを呼び出すこともできます。
最も重要なのは、cronジョブが失敗したときに電子メールを送信するようにcronが設定されていることを確認することです。これを行う最も簡単な方法はインストールすることですssmtp
。
答え2
挿入して解決策
sed -i '/1970-1/d' /var/lib/logrotate.status
logrotateスクリプトから/etc/cron.daily/logrotate