반응형

 

 

 

안녕하세요 봉자씨입니다

 

python으로 프로그램을 짜서 nohup으로 해서 백그라운드 작업을 실행했습니다.

그런데 잘 돌아 가던 프로그램이 상대 서버에 의해서 강제 킬 다하는 경우가 발생했습니다.

그럼 이 상황에서 어떻게 할까...

고민을 하다가 결국 이 방법을 사용하게 되었습니다.

죽이면 다시 살리고 죽이면 다시 살리는 일명 좀비로 살려서 계속 돌리는...

바로  방법.

 

만약에 프로세스가 돌고 있다면 다시 실행하지 않습니다.

그러나...

프로세스가 죽었거나 돌고 있지 않는다면 프로세스를 다시 돌리게 하였습니다.

 

아래와 같이 실행하시면 됩니다.

 

일단 기존 방식은 아래와 같습니다.

 

[root@ths SlackApp]# nohup python AppReviewer.py > AppReviewerLog &

설명 : AppReviewer라는 파이썬 파일을 백그라운드에서 돌리되 AppReviewerLog

         해당 파일로 로그가 쌓이도록 했습니다.

그러나 아래와 같은 로그로 프로그램이 죽어버렸습니다.

urllib.error.URLError: <urlopen error EOF occurred in violation of protocol (_ssl.c:847)>

 

그래서 아래와 같이 다시 돌리게 되었습니다.

해당 프로세스를 crontab에 등록해서 관리합니다.

그러기 위해서 아래와 같은 과정이 필요합니다.

 

먼저 해당 명령어를 입력합니다.

crontab -e

크론탭에 등록된 프로세스가 쭉나올 겁니다. 그럼 아래와 같이 명령어를 추가합니다.

 

*/5 * * * * pgrep -f AppReviewer.py || nohup python /pyApp/SlackApp/AppReviewer.py > AppReviewerLog

 

이제부터 5분만에 한번씩 프로세스를 확인합니다.

그리고 프로세스가 죽었으면? 다시 실행합니다.

프로세스가 살아서 도록 있다면? 스킵합니다.

 

이렇게 된다면 프로세스가 죽어도 다시 도는 프로세스가 완성이 됩니다.

 

 

 

 
반응형
  1. 코딩초보 2021.10.06 10:01

    */5 * * * * pgrep -f AppReviewer.py || nohup python /pyApp/SlackApp/AppReviewer.py > AppReviewerLog 에서 /pyApp/SlackApp/AppReviewer.py 이 부분은 AppReviewer.py 의 경로인건가요? /pyApp/SlackApp/ 이 부분도 무조건 적어야하는거에요?

  2. Favicon of https://bongjacy.tistory.com 봉자씨 bongjacy 2021.10.06 10:04 신고

    안녕하세요. 말씀주신 것처럼 AppReviewer.py의 경로일뿐 자신의 실행파일 경로를 넣어 주시면 되요