백그라운드에서 Python 스크립트를 실행하고 충돌 후 다시 시작하려면 어떻게합니까?


10

Ubuntu 12.04 서버에서 항상 실행하고 싶은 매우 간단한 Python 스크립트가 있습니다. upstart + monit 사용을 생각했습니다. 문제는 그러한 도구가 나와 같은 단순한 필사자에게는 다소 복잡해 보이고 웹에서 간단한 예를 찾을 수 없다는 것입니다.

upstart + monit overkill이 있습니까? 누군가가 더 간단한 대안이나 upstart + monit에 대한 좋은 자습서를 알고 있습니까? 스크립트가 항상 실행되고 있는지 확인하려면 monit이 필요합니까?


참고로, 정확히 같은 질문이 여기에 요청되었습니다 : superuser.com/q/461546/786969
PHPirate

답변:


16

가장 간단한 방법은 다음과 /etc/init/something.conf같습니다.

start on runlevel [2345]
stop on runlevel [016]

respawn
exec python /path/to/your/script.py

Respawn은 종료되거나 제로가 아닌 경우 (보지 않은 예외와 같이) 백업을 시작합니다. 우분투 10.04로 돌아갑니다.

12.04가 있다면 더 화려할 수 있습니다. 위의 스크립트는 루트로 실행됩니다. 12.04에서 setuid / setgid를 추가 할 수 있습니다 :

start on runlevel [2345]
stop on runlevel [016]

respawn
setuid nobody
setgid nogroup
exec python /path/to/your/python.py

사용 가능한 네트워크가 없을 때 스크립트가 종료되고 불안정한 네트워크 연결에서 스크립트를 실행하려는 경우 해당 스크립트를 수정하고 그대로 유지 / 재 시도하십시오. 그러나 할 수없는 경우 네트워크 장치가 나타날 때마다 수동으로 시작해야 할 수도 있습니다. 그래서 이것을 배치 할 수 있습니다 /etc/network/if-up.d/yourscript(chmod + x로 실행 가능하게하십시오)

#!/bin/sh
exec start wait-for-state WAITER=$IFACE-yourscript WAIT_FOR=something

귀하의 스크립트가이 특정 스크립트에 대해 임의적이고 고유 한 것 인 경우, "무언가"는 직무 명과 동일합니다 (예 : /etc/init/something.conf이전 에 제안 된 것).


응! 그래서 이것은 upstart올바르게 사용하고 있습니까? 이것은 부팅시 스크립트가 시작된다는 것을 의미합니까? 그리고 respawn당신은 설정하지 않아도 충분 monit합니까?
sebpiq

그렇습니다. '런레벨에서 시작 [2345]'은 시스템이 "다중 사용자 모드"에 진입 한 시점을 의미합니다. 장기적으로 가장 오래된 유닉스 "런레벨"을 '네트워크 서비스 시작시 시작'및 '네트워크 서비스 중지시 중지'와 같은 것으로 대체하여보다 논리적으로 읽을 수 있도록하는 계획이 있습니다.
SpamapS

대박 ! 정확히 내가 필요로 한 많은 감사합니다.
sebpiq

2

이전의 일반적인 접근 방식은 타임 스탬프 또는 프로세스 ID가 포함 된 파일을 작성한 /tmp다음이 프로세스 ID가 여전히 실행 중인지 또는 타임 스탬프가 여전히 최신인지 확인하는 것입니다.

또한 while [ 1 ]; do phyton-script.ph; done스크립트가 반환되는 경우 스크립트를 다시 시작 하는 간단한 방법을 사용할 수 있습니다.

더 많은 가능성을 위해 스크립트에 대한 자세한 정보를 제공하십시오. 특히 예기치 않게 종료되거나 충돌 할 것으로 예상되는 이유에 대해.


이 스크립트는 스트리밍 API를 사용하여 트위터에서 트윗을 스크랩합니다. 따라서 기본적으로 트윗이 푸시되기를 기다리는 무한 루프가 있으며 일부 코드를 실행 한 다음 다시 대기합니다. 난 그냥 걱정없이 실행되기를 원합니다 ... 버그가 있고 충돌하는 경우 등등 ...
sebpiq

당신에 대한 비슷한 답변 (허용) : superuser.com/questions/461546/…
sebpiq

또한 스크립트가 여전히 실행 중인지 확인하는 크론 작업이 좋습니다.
콘 - F-사용
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.