
만약에데비안 7호스팅된 VM과 최신 cron
데몬에서 실행 중인 서버(wheezy)에는 버그가 있어서 cron이 명백한 이유 없이 실행을 중지했습니다. 이 문제는 그 이후로 한 번만 발생했기 때문에 디버그하기가 어렵습니다.
cron이 다시 충돌하고 이메일 경고를 보내는 경우 자동으로 다시 시작되도록 하려면 어떻게 해야 합니까?
답변1
언제든지 확인해 보실 수 있습니다모니터프로젝트.
서비스를 다시 시작하고 계속 유지할 수 있습니다.
의견이 제안한 대로 cron을 수정할 수 있는 방법이 없는 경우.
답변2
프로세스를 모니터링하고 다시 시작하기 위해 daemontools와 같은 것을 실행할 수 없습니까?
네 확실합니다; 일부 컴퓨터에서는 정확히 그렇게 합니다. "daemontools와 같은 것"은 실제로노쉬 패키지그러나 daemontools 계열의 다른 구성원은 GNU cron을 감독할 수 있는 능력이 충분합니다. (Vixie cron은 또 다른 문제인데 데비안이라고 말씀하셨어요.)
GNU cron은 daemontools 제품군 서비스 관리에서 실행되는 가장 간단한 서비스 중 하나입니다. Nosh 도구 세트와 함께 제공되는 서비스 번들 컬렉션과 마찬가지로 Gerrit Pape의 실행 스크립트 컬렉션에도 이 기능이 있습니다.
즉, GNU 크론을 다시 시작해야 했던 기억이 없습니다.추락했기 때문에.
손에 쥐고 있는 서비스 관리는 단지 자동 재시작에 관한 것이 아닙니다. 그것은또한로깅 및 리소스 제어에 대해 설명합니다. 둘 다 작업과 관련이 있습니다.이유를 진단하다GNU 크론이 충돌합니다.
문제 진단에는 다음과 같은 사항이 포함됩니다.
- 코어 덤프를 활성화하는 데
run
사용할 프로그램을 편집합니다 .softlimit
- 스크립트(또는 이에 상응하는 항목) 편집
restart
…- ... 데몬이 신호로 종료되었는지 또는 종료되었는지 확인합니다.
- … 코어 덤프를 수집합니다.
- … 경고를 발생시키고 알림을 메일로 보냅니다. (한 번은 충돌/중단 시
restart
마지막 몇 줄을 나에게 메일로 보내도록 스크립트를 설정한 적이 있습니다 .)log/main/current
- ... 재시작 속도 제한을 조정합니다.
- GNU cron의 개별 로그와 서비스 관리자의 자체 로그를 읽어 데몬이 언제, 얼마나 자주 다시 시작되었는지, 어떤 오류 메시지가 출력되었는지 확인합니다.
추가 읽기
- 조나단 드 보인 폴라드(2015).daemontools 제품군. 자주 주어지는 답변.
- 게릿 파프.데비안 패키지
- https://unix.stackexchange.com/a/283132/5132
- https://unix.stackexchange.com/a/283580/5132
답변3
crond
를 통해 모니터링할 수 없기 때문에 crond
다음과 같이 만들겠습니다.
echo "while true; do if ! (ps aux |grep crond |grep -v grep); then /etc/init.d/crond start; fi && sleep 5; done &" >> /etc/rc.local
답변4
daemontools
, runit
, 등을 설치할 필요가 없습니다 supervise
. 이러한 도구는 유용하지만 일반적으로 cron에만 필요하지 않은 사용 사례를 다룹니다. 단순히 필요한 것은 init를 사용하여 쉽게 처리할 수 있습니다. /etc/inittab에 추가:
cron:2345:respawn:/usr/sbin/crond -n
crond
먼저 옵션 을 지원하는지 확인하세요 -n
. 이는 분기하지 않고 포그라운드에 남아 있도록 지시합니다. ** rc 스크립트에서 crond를 비활성화해야 합니다 **.
/usr/lib/lsb/remove_initd /etc/init.d/crond
어떤 이유로 crond 출력이 stdout 또는 stderr로 출력되는 경우 해당 출력을 처리하고 래퍼 스크립트를 생성하는 래퍼 스크립트를 작성해야 합니다. 해당 스크립트를 간단하게 유지하세요.
#!/bin/sh
#crond-wrapper.sh
exec crond -n &>>/var/log/crond
또는 while 루프 내에서 init.d/crond
호출되는 스크립트로 기존 패키지 스크립트를 수정할 수 있습니다 . 그러나 이 경우 나중에 이 스크립트에서 사용할 수 있도록 crond -n
저장하는 것에 대해 영리해야 합니다 .pid