답변:
나는이 시설에 익숙하지 않지만이 문제를 해결하는 것이 내 임무이고 매우 짧은 맨 페이지 읽기 가이 동작을 조정하는 간단한 손잡이를 제공하지 않은 경우 다음을 수행합니다.
기존 서비스 시작 스크립트를 확장하거나 번거로운 경우 체인에 새 시작 스크립트를 삽입하십시오 (원래 시작 스크립트가 시작됨). 새로운 시작 스크립트는 서비스를 즉시 시작하는 대신 마지막 시작이 최근에 충분한 지 확인해야합니다. 이전 시작에서 생성 한 신호 파일을 확인하면됩니다. 파일이 존재하지 않으면 스크립트는 파일을 터치하고 서비스를 시작할 수 있습니다. 파일이 존재하면 스크립트는 파일이 충분히 오래된 지 확인해야합니다. 오래되지 않은 경우 파일이 충분히 오래 될 때까지 루프에서 대기 (절전)해야합니다.
다음과 같이 작동 할 수 있습니다 (다시 시작하는 동안 1 분 이상 대기).
#!/bin/bash
SIGNALDIR=/tmp
SIGNALFILE=service.started
while /bin/true; do
found=`find "${SIGNALDIR}" -maxdepth 1 -name "${SIGNALFILE}" -mmin -1 | wc -l`
[ "${found}" -eq 0 ] && break
echo "Waiting"
sleep 10
done
touch "${SIGNALDIR}/${SIGNALFILE}"
original service start...
./finish
비정상적인 종료시 실행되는 해당 서비스 의 파일 에서 재시작 속도를 제한해야합니다 . ./finish
스크립트에서 리턴 코드를 받게됩니다 ./run
그리고 당신은 그 문제에 등을 수행 할 작업이 결정할 수에서, 당신은 당신이 있어야 ./finish
실패에 대해 큰 소리로 비명과 알림을 보낼 화재의 모든 주위 점프 스크립트를 ...
저는 실제로 init 기반 프로세스 관리의 팬이 아닙니다 (runit은 기본적으로 init 대체물입니다). 실패를 발견하자마자 실패한 프로세스를 간단하게 다시 시작하는 것은 특히 좋은 전략이 아닙니다. init를 사용하여 monit을 다시 시작했지만 그 정도는 아닙니다. (잠재적으로 OOM 킬러는 monit을 죽일 수 있습니다).
따라서 패치가 아닌 대체품을 찾으시기 바랍니다.
Monit은 꽤 오래되었지만 일을 잘 수행하고 더 잘 어울리는 것을 알지 못합니다. 그것은 시작 후 더 많은 메모리를 malloc 할 필요가 없다는 멋진 기능을 가지고 있으므로 스크립팅 언어로 작성된 것 중에서 지옥을 능가합니다. 마지막으로 원하는 것은 프로세스 모니터가 메모리를 얻을 수 없기 때문에 죽어가는 것입니다.