매일 다시 시작되는 Cronjob

매일 다시 시작되는 Cronjob

매일 05:00에 서버를 다시 시작하고 싶기 때문에 이 cronjob을 설정했습니다.

# file: /etc/cron.d/reboot
* 5 * * * root reboot &> /dev/null

SSH 연결에서 쫓겨나서 처음에는 효과가 있었던 것 같아요. 그런데 며칠 뒤에 다시 찾아보니 다음과 같은 내용이 있었습니다.

$ uptime
07:12:13 up 7 days

7일 동안 다시 시작되지 않았다는 뜻인가요? 뭐가 문제 야?

답변1

다른 논평자들이 말했듯이, uptime7일의 가동 시간이 보고되면 해당 시간 동안 시스템이 다시 시작되지 않은 것입니다.

@Dennis 님의 올바른 댓글 외에도 일시적으로 파이프를 제거한 /dev/nullroot메일과 /var/log/syslog.

reboot명령이 실행 중인 쉘에 없으면 cron PATH이 명령을 전혀 찾지 못할 수도 있습니다.

일부 시스템에는 이 명령이 없으므로 를 reboot사용해야 합니다 shutdown -r now.

답변2

stderr 및 stdout을 리디렉션하는 구문은 bash에서 작동하지만 &>명령 실행을 위해 bash에서는 작동하지 않을 수 있습니다./bin/shcron

이 시도:

0 5 * * * root reboot > /dev/null 2>&1

이는 Dennis Kaarsemaker의 의견에서 지적된 타이밍 오류도 수정합니다.

(애초에 이것이 좋은 생각인지에 대해서는 언급하지 않겠습니다.)

답변3

제가 드릴 수 있는 가장 좋은 대답은 상자에 어떤 문제가 있는지, 재부팅하는 데 왜 그렇게 오래 걸리는지 알아낼 수 있는 시스템 관리자를 찾는 것입니다. "문제"에 대한 다른 모든 가능한 솔루션(예: 확인 $PATH, 절대 경로 사용 reboot또는 사용 shutdown -r)은 cronjob을 작동하게 만드는 해결 방법일 뿐이지만 실제 문제에 대해서는 어둠에 빠지게 합니다.

답변4

설치된 매뉴얼 페이지를 확인하십시오 cron. 구현에 따라 다양한 작업을 수행할 수 있습니다. 예를 들어 필요한 작업(예: not PATH, 결과를 reboot찾을 수 없음)을 수행하기 전에 특정 변수만 설정하는 등의 작업을 수행할 수 있습니다.

시간 정의의 첫 번째 별표가 올바르지 않은 것 외에도 "루트" 문자열이 올바르지 않다고 생각합니다. 파일은 다음과 같아야 합니다.

# file: /etc/cron.d/reboot
0 5 * * * reboot &> /dev/null

root그렇지 않으면 인수를 사용하여 호출을 시도하기 때문에 실패합니다 reboot. 루트의 crontab을 설정하려면 crontab루트(또는 작업 사양을 설정하는 데 사용되는 모든 명령)로 명령을 실행해야 합니다.

관련 정보