다른 명령
Python 데몬 프로그램 만들기
- 데몬 프로세스(Daemon Process)는 백그라운드에서 계속 실행되는 프로세스
- 주로 서버 프로그램이나 주기적인 작업 수행에 사용.
- 우리가 주로 사용하는 웹서버 , ftp서버 등이 데몬 임.
데몬 프로세스 기본 원리
- 부모 프로세스로부터 독립되어야 한다.
- 백그라운드에서 실행되며 사용자와 직접 상호작용하지 않는다.
- 무한 루프로 주기적인 작업을 수행 함.
기본 데몬 프로세스 구현 (threading 사용)
- daemon=True: 데몬 스레드로 설정. 메인 프로세스가 종료되면 데몬도 함께 종료.
- 다음 코드는 5초마다 "Running in the background..."을 출력
import threading import time def background_task(): while True: print("Running in the background...") time.sleep(5) # 5초마다 실행 # 데몬 스레드 설정 daemon_thread = threading.Thread(target=background_task, daemon=True) daemon_thread.start() # 메인 프로세스가 종료되면 데몬도 종료됨 print("Main process is running...") time.sleep(15) # 15초 대기 후 메인 프로세스 종료
multiprocessing 모듈을 사용한 데몬 프로세스
- p.daemon = True: 데몬 프로세스로 설정
- 메인 프로세스가 종료되면 데몬 프로세스도 종료
from multiprocessing import Process import time def background_process(): while True: print("Background process running...") time.sleep(3) if __name__ == "__main__": p = Process(target=background_process) p.daemon = True # 데몬 프로세스로 설정 p.start() print("Main process running...") time.sleep(10) # 메인 프로세스 10초 대기 후 종료
데몬 프로세스 서비스로 실행 (Linux 환경)
1) 단계 1: Python 스크립트 작성
- my_daemon.py로 저장
import time import os def daemon_process(): while True: with open("/tmp/daemon_log.txt", "a") as f: f.write(f"Daemon alive! PID: {os.getpid()}\n") time.sleep(10) if __name__ == "__main__": daemon_process()
2) 단계 2: 서비스 파일 생성 (systemd)
- /etc/systemd/system/my_daemon.service 파일을 생성하고 다음 내용을 작성
[Unit] Description=My Python Daemon [Service] ExecStart=/usr/bin/python3 /path/to/my_daemon.py Restart=always [Install] WantedBy=multi-user.target
3) 단계 3: 서비스 시작 및 상태 확인
sudo systemctl daemon-reload sudo systemctl start my_daemon.service sudo systemctl enable my_daemon.service # 부팅 시 자동 시작 # 데몬 상태 확인 sudo systemctl status my_daemon.service
assignment 데몬 프로세스의 주의 사항
- 무한 루프와 예외 처리: 데몬은 무한 루프를 사용하므로 예외 처리를 꼭 추가해야 함.
- 서비스 종료 처리: 종료 신호(SIGTERM, SIGINT)를 받을 때 적절히 정리하는 코드가 필요 함.