2016-10-15 5 views
1

task.py이 메모리 오버 플로우로 인해 고장 났다고 가정합니다. 어떻게 모니터링하고 다시 시작할 수 있습니까?파이썬 프로세스를 모니터하고 비정상 종료시 재시작하는 방법

import time 
while(1): 
    print('.') 
    # simulate breaks 
    time.sleep(2) 
    exit(0) 

감사

+1

프로세스의 메모리가 부족한 이유는 무엇입니까? 당신은 그 문제를 해결해야합니다. 재시작을 위해 ['supervisord'] (http://supervisord.org/introduction.html)을보고 실패한 프로세스 재시작을 관리 할 수 ​​있습니다. – mhawke

답변

1

당신은 감시를 사용할 수 있습니다. 작업자 프로세스가 더미 파일을 10 초마다 업데이트하도록합니다. 마지막 액세스가 20 초 전에 끝난 것이 아닌지 완전히 독립적 인 또 다른 프로세스 확인을하십시오. 그렇다면 작업자 프로세스를 다시 시작하십시오.

OS를 사용하는 방법에는 여러 가지가 있지만, 시계가 동기화되었다고 가정 할 때 네트워크를 통해 쉽게 작동 할 수 있습니다.

0

실제로 메모리가 부족한 경우 OOM killed이됩니다. 프로세스를 계속 다시 시작하는 프로세스가있는 경우 (예 : while true; do /path/to/my_script.py; done) 즉시 다시 실행해야합니다. 이 같은

2

뭔가 작업을해야합니다 :

while ! /path/to/task.py; do 
    echo 'restarting task...' 
done 

task.py 하면 종료 루프가 계속 스크립트를 다시 실행 0이 아닌 종료 상태. 루프는 task.py0으로 종료 될 때만 중단됩니다.

프로그램에서 오류가 발생하여 항상 0이 아닌 종료가 발생하면 결국 무한 루프가됩니다. 따라서 재시도 횟수를 max_try 값으로 제한하는 것이 더 좋습니다.

#!/bin/bash 
max_try=100 
count=1 
while ! python /path/to/task.py; do 
    ((count++)) # increment (Bashism) 
    #count=$(expr $count + 1) # increment (portable) 
    if [ $count -gt $max_try ]; then break; fi 
    echo 'restarting task...' 
done 
+0

그래서 다시 시작하는 방법. –

+0

@pandaZW : 이미 있습니다. 'while '의 첫 번째 행은 스크립트를 시작/재시작합니다. task.py가 shebang 행 ('#!/usr/bin/python')을 가지고 있지 않으면'/ path/to/task.py'를'python/path/to/task.py'로 바꿉니다 – Jahid

+0

그냥 제안합니다. ,하지만 프로그램이 계속 실패한다면 이것은 비명을 지르는 루프입니다. 재시작 횟수를 사용하는 온 전성 검사일까요? – cdarke

관련 문제