runit 서비스의 자동 재시작 속도를 제어하는 ​​방법은 무엇입니까?


8

나는이 runit의와 서비스가 runlog/run스크립트가 제대로 작동.

이로 인해 서비스 자체가 외부 이유로 중단 될 수 있으며 몇 분 동안 시작하지 못할 수 있습니다. runit이이 상황을 처리하는 기본 방법은 몇 초마다 서비스를 다시 시작하는 것입니다. 이 동작을 어떻게 변경합니까?

마지막 통찰력은 check스크립트 를 추가하고 거기에서 마술을 쓰는 것이었지만, 그보다 훨씬 복잡해 보입니다. 더 간단한 방법이 있습니까?

답변:


3

나는이 시설에 익숙하지 않지만이 문제를 해결하는 것이 내 임무이고 매우 짧은 맨 페이지 읽기 가이 동작을 조정하는 간단한 손잡이를 제공하지 않은 경우 다음을 수행합니다.

기존 서비스 시작 스크립트를 확장하거나 번거로운 경우 체인에 새 시작 스크립트를 삽입하십시오 (원래 시작 스크립트가 시작됨). 새로운 시작 스크립트는 서비스를 즉시 시작하는 대신 마지막 시작이 최근에 충분한 지 확인해야합니다. 이전 시작에서 생성 한 신호 파일을 확인하면됩니다. 파일이 존재하지 않으면 스크립트는 파일을 터치하고 서비스를 시작할 수 있습니다. 파일이 존재하면 스크립트는 파일이 충분히 오래된 지 확인해야합니다. 오래되지 않은 경우 파일이 충분히 오래 될 때까지 루프에서 대기 (절전)해야합니다.

다음과 같이 작동 할 수 있습니다 (다시 시작하는 동안 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...

좋은 접근 방법입니다. 테스트하자마자 필요한 수정 사항이있는 스크립트를 작성하겠습니다.
jpbochi

8

./finish비정상적인 종료시 실행되는 해당 서비스 의 파일 에서 재시작 속도를 제한해야합니다 . ./finish스크립트에서 리턴 코드를 받게됩니다 ./run그리고 당신은 그 문제에 등을 수행 할 작업이 결정할 수에서, 당신은 당신이 있어야 ./finish실패에 대해 큰 소리로 비명과 알림을 보낼 화재의 모든 주위 점프 스크립트를 ...


고마워 이것은 정답이지만 불행히도 파이썬, 루비 등을 사용하는 현대 프로그래머는 항상 유닉스 신호에주의를 기울이지 않고 적절한 종료 코드를 제공하지 않는 앱을 ​​작성하는 것처럼 보입니다.
figtrap

1
반환 된 오류 코드는 분명히 "비냉 각적"이라고 생각합니까?
에이버리 페인

그런 것 같습니다. 나는 그것의 큰 발걸음이 나 자신이라고 생각합니다.
figtrap

1

저는 실제로 init 기반 프로세스 관리의 팬이 아닙니다 (runit은 기본적으로 init 대체물입니다). 실패를 발견하자마자 실패한 프로세스를 간단하게 다시 시작하는 것은 특히 좋은 전략이 아닙니다. init를 사용하여 monit을 다시 시작했지만 그 정도는 아닙니다. (잠재적으로 OOM 킬러는 monit을 죽일 수 있습니다).

따라서 패치가 아닌 대체품을 찾으시기 바랍니다.

Monit은 꽤 오래되었지만 일을 잘 수행하고 더 잘 어울리는 것을 알지 못합니다. 그것은 시작 후 더 많은 메모리를 malloc 할 필요가 없다는 멋진 기능을 가지고 있으므로 스크립팅 언어로 작성된 것 중에서 지옥을 능가합니다. 마지막으로 원하는 것은 프로세스 모니터가 메모리를 얻을 수 없기 때문에 죽어가는 것입니다.


EL7 및 대부분의 다른 배포판에 포함 된 systemd 는 기본적으로이 상황과 다양한 유사한 상황을 처리 할 수 있는 방대한 옵션을 제공 하며 대부분 이와 같은 프로세스 관리자를 더 이상 사용하지 않습니다.
Michael Hampton

1
대상 환경에 대해 systemd가 "너무 클 수있는"소수의 상황이 있습니다. 그리고 "실행할 때까지 다시 시작하여 프로세스 관리"의 기존 방법은 대부분 적절한 종속성 분석으로 대체되었습니다. 예제는 skarnet.org/software/s6-rcjjacky.com/anopa 를 참조하십시오 .
에이버리 페인
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.