매일 오후 12시 10분에 종료 bash 스크립트를 실행하는 cron 명령이 있습니다.
10 0 * * * /bin/bash /var/www/scripts/special-reboot.sh
스크립트는 매우 기본적이며, 수행하는 작업은 nginx를 종료하고 MySQL의 MEMORY 테이블에서 일반 테이블로 데이터를 이동하는 것뿐입니다. 그런 다음 실행됩니다.sudo /sbin/shutdown -r now 'Daily restart.'
한두 달 정도는 괜찮게 돌아가고 있었는데 어젯밤에 아주 이상한 일이 일어났는데 그 이유를 알아야 합니다.
중요한 프로세스가 15분마다 실행되는지 확인하는 Python 로깅 스크립트가 있습니다. 어젯밤에 재부팅한 후 로그는 다음과 같습니다(날짜 및 시간 참고).
[2019-02-12 23:45]
...
[2019-02-13 00:00]
...
[2016-11-04 03:30]
...
[2016-11-04 03:45]
...
[2016-11-04 04:00]
...
[2016-11-04 04:15]
...
[2016-11-04 04:30]
...
[2016-11-04 04:45]
...
[2016-11-04 05:00]
...
[2016-11-04 05:15]
...
[2016-11-04 05:30]
...
[2019-02-13 02:30]
...
[2019-02-13 02:45]
...
[2019-02-13 03:00]
보시다시피 갑자기 다른 날짜 시간부터 약 2시간 동안 카운트가 시작되었다가 다시 정상으로 돌아옵니다.
가장 무서운 점은 영향을 받는 것이 Python 스크립트만이 아니라는 것입니다. 전기 충격을 추적하는 또 다른 C 스크립트에는 이 기간에 대한 데이터가 누락되어 있습니다.
무엇이 원인인지 모르겠습니다. 내 로깅 스크립트 덕분에 이 기간 동안 모든 중요한 프로그램이 완벽하게 실행되고 있었다는 것을 알고 있습니다. 제 생각에는 이것이 프로그램 문제라기보다는 시스템 문제일 가능성이 가장 높습니다.
답변1
Raspberry Pi에는 실시간 클록(RTC)이 없습니다.
라즈베리 파이는 초저가형 컴퓨터로 설계되었기 때문에 우리가 컴퓨터에서 익숙하게 사용했던 많은 기능이 생략되었습니다. 예를 들어 랩탑과 컴퓨터에는 전원이 꺼지거나 배터리가 제거된 경우에도 시간을 유지하는 소형 코인 셀 배터리 구동 "실시간 시계"(RTC) 모듈이 있습니다. 비용을 낮추고 크기를 작게 유지하기 위해 RTC는 Raspberry Pi에 포함되지 않습니다. 대신 Pi는 이더넷이나 WiFi를 통해 인터넷에 연결하여 글로벌 NTP(Network Time Protocol) 서버에서 시간을 자동으로 업데이트하도록 설계되었습니다.
라즈베리 파이는 약 6달러에 구입할 수 있습니다. 그렇지 않으면 NTP가 유일한 옵션입니다.