2009-04-24 3 views

답변

9

페도라와 우분투 upstart를 사용, 출력되는 경우 자동으로 데몬을 다시 시작 할 수있는 능력을 가지고 : 사람이 페이지에서.

0

이것은 쉽지 않습니다. "알고 있습니다. 내 프로그램을 보거나 프로그램이 이미 표준 서비스로 제공되는지 확인하겠습니다." 누군가가 을 죽이면 그 프로그램이이 될까요? 감시자를 누가 보죠?

+0

그래, 나도 알아, 내가 :-) 내가 secretely 리눅스는 기능을 가지고 기대 질문을하는 이유는 이것을 위해 ... – Barth

+1

첫 번째 프로그램, 그래서 그들은 서로를 지켜 봅니다. 그렇습니다. 여전히 패배 할 수 있지만, 까다 롭습니다. –

+1

'프로그램'이 특정 권한으로 실행중인 경우 누군가를 죽이는 것에 대해 걱정할 필요가 없습니다. 뿌리가 그것을 죽이면 아마 필요할 것입니다. –

6

나는이 일을하는 가장 쉬운 방법은 프로그램을 시작하는 스크립트를 갖고 그것이 반환되면 다시 시작하는 것이라고 생각합니다.

#!/bin/sh 
while true; do 
    ./Your_program 
done 
+2

그리고 감시자를 누가 감시합니까? – Alnitak

+0

필자는이 트릭의 좀 더 복잡한 버전을 사용했습니다. 필자는 시작 종속 관계에주의하면서 데몬 세트를 시작하는 펄 스크립트를 가지고 있습니다. 실제로 시스템이 큰 문제가되지 않는 한 간단한 스크립트 (예제와 같이)는 실패하지 않습니다. 어쨌든 시스템이 붕괴되지 않으면 간단하지만 실패하지 않을 것입니다. –

+1

개발자가 문제를 해결할 수는 있지만 전문 지식을 갖춘 시스템 관리자가 솔루션을 제공해야하는 전형적인 경우입니다. 프로그램이 중간에 죽으면 어떻게됩니까? 예를 들어 필요한 파일이 삭제 된 경우에는 드문 일이 아닙니다. 이 루프는 기계의 성능을 떨어 뜨리고 기계를 떨어 뜨릴 위험조차 있습니다. 이것은 시스템 관리자의 절대로 끝나지 않는 루프입니다. 이 솔루션을 사용하지 마십시오! – nxadm

1

종료 될 때 프로그램을 다시 시작하는 "감시자"프로세스의 하위로 계속 실행하려는 프로그램을 만듭니다. wait/waitpid (또는 SIGCHILD)를 사용하여 자식이 종료 할 때를 알릴 수 있습니다. 다른 사람이 작성한 코드가이 작업을 수행 할 것으로 기대합니다. (init (8)이하는 일과 거의 같습니다)

그러나 프로그램은 아마도 무언가를합니다. 응용 프로그램이 실행 중인지 확인할 수있을뿐만 아니라 중단되거나 무언가가 의도 된 서비스를 제공하고 있는지 확인할 수도 있습니다. 이는 제대로 작동하는지 확인하기 위해 일종의 프로브 또는 가상 트랜잭션을 실행하는 것을 의미 할 수 있습니다.

편집 : inittab에 'respawn'유형을 지정하면 init이 사용자를 대신하여이 작업을 수행 할 수 있습니다.

respawn 
    The process will be restarted whenever it terminates (e.g. getty). 
4

Monit은 원하는대로 할 수 있습니다.

앱이 실행 상태를 확인할 수있을 정도로 스마트 한 경우 cron이 옵션입니다 (실행중인 복사본이 많지 않음). 이것은 보통 PID 파일을 통해 표준 방식으로 수행됩니다.

+0

응용 프로그램이 너무 많은 리소스를 사용하여 실행을 시작하면 너무 무거워집니다. cron 메서드는 간단한 응용 프로그램에 유용합니다. –

2

launchtool은 내가이 용도로 사용한 프로그램으로, 프로세스를 모니터링하고 필요에 따라 다시 시작하며 재 호출하기까지 몇 초 기다릴 수도 있습니다. 이것은 응용 프로그램을 다시 시작하기 전에 해제해야하는 소켓이있는 경우 유용 할 수 있습니다. 그것은 내 목적에 매우 유용했습니다.

+0

Red Hat에서 작동합니까? – Barth

+0

Fedora 용으로는 launchtool이 패키지되어 있지 않으므로 RedHat에있을 것으로 의심됩니다. –

4

* nix에서 스크립트에 그것을 할이 개 적절한 방법이 있습니다 :

  1. 이 (Solaris의 SMF/SVC, 우분투에 신출내기, 등등 ... 같은) OS 인프라를 사용. 이것은 언제든지 중지/재시작/활성화/비활성화/재구성이 가능한 적절한 방법입니다.

  2. /etc/inittab (부팅시 활성화 됨)에 "respawn"을 사용하십시오.

+0

inittab의 respawn은 "감시자를 감시하는 사람"도 해결합니다. init이 죽거나 죽으면 시스템이 패닉 상태가되어 프로세스 재시작에 대해 걱정할 필요가 없습니다. – camh

+0

그게 인프라의 임무입니다. 수백 가지 프로세스에 대해 * 하나의 감시자 (필요시 다시 시작됩니다)가 있습니다. 하나의 프로세스에 대해 기계를 공포에 빠뜨리려고하지 마십시오. – nxadm

1

응용 프로그램이 실행 중인지 확인하기 위해 약 10 분마다 검사하는 스크립트는 어떻습니까? 그렇지 않은 경우 컴퓨터를 다시 시작합니다. 응용 프로그램이 실행 중이면 계속 확인합니다.

내 스크립트는 프리웨어 프로세스 뷰어 유틸리티 인 PrcView를 사용합니다. 그리고 notepad.exe를 실행해야하는 예제 응용 프로그램으로 사용했는데 매 10 분마다 검사 명령을 내릴 수 없으며 스크립트에서 어디로 갈지 알 수 없습니다.

는 PATH = % 경로 %를 @echo; % PROGRAMFILES % \ PV] % PROGRAMFILES % \ 메모장 PV.EXE의 NOTEPAD.EXE가> NUL ERRORLEVEL 1 고토 를 Process_NotFound 경우는 : 메모장이 고토 실행 에코 Process_Found END 가 : 메모장이 종료를 실행하지 않는 에코 Process_NotFound/R/T 50 고토 END : END

관련 문제