시스템 시간을 뒤로 설정하면 로그 회전 작업에 영향을 줍니까?

시스템 시간을 뒤로 설정하면 로그 회전 작업에 영향을 줍니까?

저는 루트 파일 시스템이 SD 카드에서 마운트되는 임베디드 Linux 시스템을 개발 중입니다. 이와 같은 많은 시스템이 /var/log램디스크에 그냥 설치되어 있는 반면, 중요한 이벤트를 기록하기 위해 로그를 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다음과 같이 logrotate 상태 파일에서 1970년에 대해 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

마지막으로 상태 파일에 쓰기를 시도하지 않을 것이라는 메시지가 표시되므로 이제 로그가 올바르게 회전되지 않는다는 의미인지 걱정됩니다. 이런 일이 발생하면 logrotate가 어떻게 되는지 아는 사람이 있습니까?

시스템이 설치된 곳에서는 정전이 일어날 확률이 낮기 때문에 시간을 정확하게 맞추는 것이 좋겠지만, 장애가 발생하더라도 logrotate가 망가지지 않도록 꼭 해줬으면 좋겠습니다.

답변1

logrotate 상태 파일은 다음 용도로 사용됩니다.일일 로그가 마지막으로 회전된 시기를 추적합니다.. 내 임베디드 시스템 중 하나에서는 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

관련 정보