システム時間を後ろに設定すると、ログの回転操作に影響しますか?

システム時間を後ろに設定すると、ログの回転操作に影響しますか?

私は、ルートファイルシステムがSDカードからマウントされる組み込みLinuxシステムを開発しています。このようなシステムの多くは/var/logRAMディスクにインストールされていますが、重要なイベントを記録するために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

おすすめ記事