목차
- 파이썬 pid 파일을 사용하여 파이썬 중복 실행 방지 예제 이전 포스팅 참고 학습
- 파이썬 프로세스 와치독 WatchDog 프로세스명으로 종료 감지 예제 이전 포스팅 참고 학습
- 파이썬 와치독 WatchDog 에서 특정 프로세스 종료시 재실행 예제 이전 포스팅 참고 학습
- 파이썬 와치독 WatchDog에 PID 파일로 자기 자신 중복 실행 방지 예제
- 파이썬 crontab에 와치독 WatchDog 프로세스 주기적으로 실행하도록 설정 예제
파이썬 pid 파일을 사용하여 파이썬 중복 실행 방지 예제 이전 포스팅 참고 학습
이전 포스팅에서는 파이썬 스크립트가 동시 실행되거나 이미 실행중인데 또 다시 실행될 때 중복 실행 방지하는 방법에 대해 알아보았습니다. 중복 실행방지를 위해 PID 파일을 생성하여 현재 실행중인 프로세스의 pid를 작성하였습니다. 그리고 신규 실행되는 파이썬에서는 이 pid의 프로세스가 살아있다면 즉시 자기 자신을 종료하여 중복 실행되지 않도록 방지하였습니다. 이처럼 PID 파일을 사용하여 파이썬 스크립트가 중복 실행되는 것을 방지하는 방법이 궁금하시다면 아래 링크를 참고해주세요.
2023.10.19 - [Python] - [Python/Linux] 파이썬 스크립트 중복 실행 방지 예제(pid 파일 활용)
파이썬 프로세스 와치독 WatchDog 프로세스명으로 종료 감지 예제 이전 포스팅 참고 학습
다음으로 이전 포스팅에서는 특정 프로세스명으로 지속적으로 프로세스 상태를 체크하여 현재 해당 프로세스가 실행중 상태인지 확인하는 와치독 WatchDog 구현 방법에 대해 알아보았습니다. 크롬 브라우저를 예시로 브라우저가 실행중인지 아닌지를 10초마다 파악하게하고 만약 종료가되었다면 종료된 상태를 감지하여 메세지를 출력하였습니다. 이처럼 파이썬 스크립트에서 와치독을 구현하여 특정 프로세스가 종료되었는지 아닌지를 판단하는 방법에 대해 궁금하시다면 아래 링크를 참고해주세요.
2023.10.19 - [Python] - [Python/Linux] 파이썬 프로세스 와치독 WatchDog 만들기 예제 - 1(프로세스명으로 특정 프로세스 종료 감시)
파이썬 와치독 WatchDog 에서 특정 프로세스 종료시 재실행 예제 이전 포스팅 참고 학습
마지막으로 이전 포스팅에서는 파이썬에서 와치독 WatchDog의 기능을 고도화하여 감시하고 있던 프로세스가 종료되었다면 다시 재 실행시켜서 서비스에 문제가 없도록 하는 방법에 대해 알아보았습니다. 따라서 와치독에 의해 항상 해당 프로세스는 실행 상태를 유지시킬 수 있습니다. 오늘 예제에서는 이러한 와치독 WatchDog 프로세스도 종료될 경우를 대비하여 자기 자신도 종료시 재 실행시키고 중복 실행되지 않도록 하는 예제에 대해알아보도록 하겠습니다.
2023.10.19 - [Python] - [Python/Linux] 파이썬 프로세스 와치독 WatchDog 만들기 예제 - 2(프로세스 종료시 재시작)
파이썬 와치독 WatchDog에 PID 파일로 자기 자신 중복 실행 방지 예제
아래는 파이썬의 와치독 WatchDog 프로세스가 최초 실행시 pid를 PID파일에 작성하고 이후 중복 실행시에는 재실행되지않도록 하는 예제 코드입니다.
import os
import psutil
import time
# PID 파일 경로
pid_file = "/tmp/python_watchdog.pid"
# 모니터링할 프로세스 이름
process_name = "chrome"
# 크롬 브라우저 실행 명령
chrome_command = "google-chrome"
# PID 파일에서 PID 값을 읽음
pid = -1
try:
with open(pid_file, 'r') as file:
pid = int(file.read())
except Exception:
pid = -1
# PID가 현재 실행 중인지 확인
if os.path.exists(f"/proc/{pid}"):
print(f"이미 PID {pid} 프로세스가 실행 중입니다.")
else:
current_pid = os.getpid()
with open(pid_file, "w") as file:
file.write(str(current_pid))
while True:
# 모든 프로세스 목록 가져오기
for process in psutil.process_iter(attrs=['name']):
if process.info['name'] == process_name:
# 프로세스가 실행 중인 경우
print(f"{process_name} 프로세스 실행 중")
break
else:
# 프로세스가 종료된 경우
print(f"{process_name} 프로세스가 종료되었습니다.")
# 크롬 브라우저 실행
os.system(chrome_command)
# 주기적으로 체크 (예: 10초마다)
time.sleep(10)
파이썬 crontab에 와치독 WatchDog 프로세스 주기적으로 실행하도록 설정 예제
아래는 파이썬의 와치독 WatchDog 프로세스 자기 자신도 종료될 경우를 대비하여 리눅스의 crontab에 자기 자신을 주기적으로 실행시키도록 설정하는 예제입니다.
$ crontab -e
...
* * * * * python3 /home/wonseok/watchdog.py