2016-08-30 4 views
0

다음 문제를 해결하고 있습니다 :스크립트가 충돌하기 전에 함수가 호출됩니다.

나는 24/7 서비스로 실행되어야하는 스크립트가 있습니다. 그것이 매우 중요하기 때문에, 나는 추락 할 경우를 대비해서 나에게 이메일을 보내고 싶다. atexit 모듈을 찾았지만 문서에서 충돌을 처리 할 수 ​​없다고 특별히 말합니다.

내 질문은 :이 하나가 실행되고 있는지 확인합니다 다른 serivce를 실행하여보다 달성이 더 좋은 방법은 무엇입니까? 또는 여기서 목표는 서비스를 작성하여 충돌을 일으키지 않도록하는 것입니다 (거의 불가능 함).

의견을 보내 주셔서 감사합니다.

+0

? 여기서 처리되지 않은 예외를 이야기하고 있습니까, 아니면 세그멘탈과 같은 것입니까? 'atexit' exit 핸들러는 아직 처리되지 않은 예외 상황에서 계속 실행됩니다. – user2357112

+0

모든 종류의 충돌은 언급 된 segfault 나'SIGTERM'처럼 "uncatchable"인 것처럼 처리 할 수 ​​없습니다. 할 수있는 일은 [supervisor] (http://supervisord.org/index.html)와 같은 외부 도구를 사용하여 시작/재시작을 처리하고 [events] (http://supervisord.org/events)를 사용하는 것입니다. .html) 당신은 전자 메일을 보내기 위해'FATAL' 상태에 들어가는 프로세스에 대해들을 수 있습니다. 동일한 프로세스로 프로세스를 모니터하는 메커니즘을 내장하는 것은 위험합니다. – Yakuza

+0

관리자 도구를 살펴 보겠습니다.이 도구가 유일한 올바른 것 같습니다. 감사합니다 – karlosss

답변

0

첫 번째 부분에서는 try/except를 사용하여 스크립트의 주요 부분을 감쌀뿐입니다.

myscript.py : 충돌 - y는이 충돌 얼마나

def main(): 
    long_running_process() 

if __name__ == '__main__': 
    try: 
     main() 
    except: 
     send_email() 
+0

세분화 오류가 발생하면 작업 할 기회가 없습니다. – karlosss

+0

예, 그렇다면 관리자, 신입 사원, init.d 등의 서비스 모니터가 필요합니다. – postelrich