Openwrt : cron/crontab, 정기 재부팅 설정.

Openwrt 에서 root 권한으로 cron job 을 실행하려면, crontab -e 로 접근한 뒤 명령을 넣으면 된다. 우분투처럼 /etc/cron.d 등은 존재하지 않는다.

또는, Luci 에서도 설정할 수 있다. 여기에 넣어도 결국 crontab -e 으로 한 것과 동일한 결과가 나온다.

IPTime 에도 있지만, 매일/매시간 켜져있는 공유기의 오작동을 줄이기 위해선 매일 재부팅을 시켜주는게 좋다.

그러려면 이런 식으로 넣어주면 된다.

0 4 * * * reboot

그런데.. rtc(Real Time Clock)이 없는 대부분의 공유기에서는, 자칫 잘못하면 부한 재부팅이 이뤄지는 사태가 벌어질 수도 있다고 한다.

왜 그런 현상이 일어날 수 있을 지에 대해선 Openwrt 문서에 자세하게 나와있다.

아무튼, 그를 위해서, 다음과 같은 ‘돌아가기’가 필요하다.

0 4 * * * sleep 70 && touch /etc/banner && reboot

이 명령은, 매일 오전 4시에, 일단 70초를 기다린 후 /etc/banner 파일에 4:01 시간 도장(Time Stamp)을 찍고, 그리고 재부팅을 시작한다.
재부팅이 되면서 시스템은 일단 /etc/ 산하에 있는, 가장 최근 시각을 가진 파일로부터 현재 시간을 설정한다. 추후 NTP 서버와 통신하여 제대로된 시간에 맞추게 된다.

sleep 과 touch 를 하지 않게 되면, /etc/ 로부터 얻게되는 시간과, NTP 에서 얻어오는 실제 시간 사이에 새벽 4시 정각이 걸리게 될 가능성이 있으며, 그 사이에 cron 작업이 진행되어 계속 부팅이 이뤄질 수도 있다.

이를 방지하고자 위와 같은 작업이 필요하다고 한다.

시스템에 RTC 가 설치되어 있는지는 일반 리눅스에서는 timedatectl 로 알 수 있는데, openwrt 에는 이 명령이 없다. 대신 hwclock 명령으로 가능했다.

결과는 이랬다.

hwclock
hwclock: can't open '/dev/misc/rtc': No such file or directory

따라서, 없다고 보는게 맞고, sleep / touch 명령을 넣는게 좋겠다.

안녕하세요. 글 남겨주셔서 고맙습니다.