프로세스를 감독하고 자동으로 다시 시작하는 방법은 무엇입니까?


34

충돌하면 다시 시작되는 프로세스를 갖고 싶습니다. 나는 조금 구글 검색하고 쉬운 해결책은 daemontools 를 사용하는 것으로 나타났습니다 .

구성 방법을 이해하지 못했습니다.

  1. 그러한 기능을 완성하는 가장 쉬운 방법은 무엇입니까?
  2. 그것을 구성하는 방법?

답변:


29

이 답변은 Upstart (<= 14.10)의 Ubuntu 버전에 적용됩니다. Systemd (> = 15.04) 버전의 경우 다른 방법을 사용하십시오.

Ubuntu에서 Upstart로 이미 제공 한 기능을 찾고있는 것 같습니다 . respawn구성 의 스탠자는 필요한 것을 정확하게 수행합니다. 나는 이것을 다루는 덜 표준적인 방법을 사용하지 않는 것이 좋습니다.

관리하려는 프로세스에 대한 자세한 내용이 없으면 구성의 모양을 말하기가 어렵습니다. 예를 들어 포크와 배경에 있는지 여부에 따라 다릅니다. 스탠자 의 Upstart 문서는respawn 자세한 정보를 제공해야합니다.

불행히도 아직 사용자 작업을 올바르게 실행할 수는 없습니다 : 사용자 작업을 시작하기 위해 시작할 수 없습니다

불로 죽었을 때에도 계산기 앱을 계속 실행한다고 가정합니다 (신호 9).

  1. 이 기사를/etc/init/calculator.conf 기반으로 구성 파일을 작성하십시오 .

    #!upstart
    description "Calculator"
    
    # Start job via the daemon control script. Replace "gert" with your username.
    exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
    
    # Restart the process if it dies with a signal
    # or exit code not given by the 'normal exit' stanza.
    respawn
    
    # Give up if restart occurs 10 times in 90 seconds.
    respawn limit 10 90
    
  2. 실행하여 시작

    sudo start calculator
    
  3. 현재 디스플레이에서 열리고 ( :0) 닫은 후 다시 시작되는 것을 보면서 멋지게 즐길 수 있습니다.

    • 예를 들어 다음을 수행하여 프로세스 ID를 식별하십시오 ps aux | grep calculator.

      gert  13695 0.2 0.4 349744 16460 ?   Sl   13:38   0:00 /usr/bin/gnome-calculator
      
    • 불로 그것을 죽이다.

      sudo kill -9 13695
      
    • 다시 나타나는 것을보십시오 :

      gert  16059 4.6 0.4 349736 16448 ?   Sl   13:40   0:00 /usr/bin/gnome-calculator
      

적절한 사용자 작업을 지원하는 Ubuntu 13.04 계획에 더 적합합니다.


시작할 때 알 수없는 직업이 있습니까? 어떤 이데아. 파일을 / etc / init에 배치했습니다
opc0de

@ opc0de 파일 이름은 servicename.conf시작 명령과 일치해야합니다 start servicename. 다른 이름을 선택했다고 생각합니다.
gertvdijk 2013

아니요, 일치하지만 예제를 따르지 않았으므로 구문 오류가있을 수 있습니다.
opc0de

@ opc0de 글쎄, 당신이 질문에서 성취하려고하는 것에 대해 더 자세히 설명하십시오 : 어떤 종류의 응용 프로그램 / 프로세스 및 실행 방법, 현재 시도에 대한 세부 사항.
gertvdijk 2013

귀하의 예를 들어 내 실수는 아마도 내가 exec statament에 실수를했다고 생각했습니다. 당신의 도움을 주셔서 감사합니다!
opc0de

13

구성 없이도 동일한 효과를 얻을 수있는 매우 간단한 도구는 immortal다음과 같습니다. https://immortal.run/

다음과 같이 명령을 실행하십시오.

immortal <cmd>

백그라운드에서 실행되고 종료되면 자동으로 다시 시작됩니다.

  • immortalctl: 실행중인 작업의 상태를 봅니다. 가 name여기에 인쇄됩니다 열, 당신은 다른 제어 명령을 사용하여 작업을 참조하려면이 옵션을 사용할 수 있습니다.
  • immortalctl stop <name>: 주어진 이름으로 작업 모니터링을 중지합니다 (자동으로 다시 시작되지는 않지만 현재 프로세스는 계속 실행 됨).
  • immortalctl -k <name>: SIGKILL을 현재 프로세스로 보냅니다.
  • immortalctl exit <name>: 주어진 이름으로 작업 모니터링을 중지하고 작업 목록에서 제거합니다.

1
고마워, 이것은 16.04의 유스 케이스에 효과적이었습니다. 유용한 도구를 가방에 넣습니다.
Quentin Skousen 2016 년

2
실제로 이것은 시작 / 재현보다 더 가벼워 보입니다.
Sridhar Sarnobat

디스플레이 stdoutstderr전경 에 표시하는 방법이 있습니까?
David S.

나는 일반적으로 백그라운드에서 프로세스를 실행하는 데 사용되기 때문에 하나를 알지 못합니다. 그러나 immortalctl -l out.log <cmd> && tail -f out.log동일한 효과를 얻기 위해 사용할 수 있습니다 .
extropic-engine

@DavidS. 결합 된 로그를 얻거나 stdout 및 stderr immortal.run/post/stderr을
nbari

1

데몬 / 서비스 / 백그라운드 프로세스 기능이 필요하지 않고 콘솔에서 수행하려면 다음과 같은 파일을 만드십시오 autorestart.sh.

#!/bin/bash

while [ 1 ]; do
  some_command
done

그런 다음 종료되거나 충돌하면 ./autorestart.sh자동으로 다시 시작 some_command됩니다. CTRL-C는 루프를 끊고 프로그램을 완전히 종료합니다.

우분투 18.04에서 테스트되었습니다.


0

"업 스타트"가없는 방법이 있습니다. 키워드는 "inittab":-)입니다. 파일은 일반적으로 기본값에서 변경되지 않았지만 SYSV 머신에서 원하는 부활을 달성하는 데 사용될 수 있습니다.


누군가이 솔루션을 거부 한 이유를 이해하지 못합니다. 당신이 그것을 이해하지 못하면, 그냥 구글; initttab 맨 페이지를 잘라 붙여 넣는 것은 의미가 없습니다. 시스템에서 직접 읽을 수 있습니다! 그냥 "man inittab"이라고 입력하십시오.
cepal67

13
높은 품질의 답변은 "이것을 사용하고, 스스로 알아내는 것"보다 더 자세합니다. :)
Seth

0

ps-watcher는 실행중인 프로세스를 감시하고 정의 된 환경에서 작업을 실행하는 도구입니다. 설치하자 :

apt-get install ps-watcher

자세한 내용은 PHP-FPM으로 폴백하여 HHVM 실행 의 맨 아래를 참조하십시오 .


길지 않기 때문에이 질문에 아주 짧은 섹션 만 적용되므로 기사 대신 코드 요약을 추가하십시오.
derHugo

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.