파이썬 데몬 프로그램 개발을 위한 python-daemon 모듈

https://pagure.io/python-daemon/

파이썬으로 데몬 프로그램을 개발시에 유용하게 사용가능한 python-daemon 모듈입니다.

설치

# pip install python-daemon

Collecting python-daemon
  Downloading https://files.pythonhosted.org/packages/e6/44/6734382d1beb8704137ec94589e7d173a415f3396e34d020fb6b6271c2ff/python_daemon-2.2.3-py2.py3-none-any.whl
Collecting lockfile>=0.10 (from python-daemon)
  Downloading https://files.pythonhosted.org/packages/c8/22/9460e311f340cb62d26a38c419b1381b8593b0bb6b5d1f056938b086d362/lockfile-0.12.2-py2.py3-none-any.whl
Requirement already satisfied: setuptools in ./myenv/lib/python3.6/site-packages (from python-daemon) (39.0.1)
Collecting docutils (from python-daemon)
  Downloading https://files.pythonhosted.org/packages/36/fa/08e9e6e0e3cbd1d362c3bbee8d01d0aedb2155c4ac112b19ef3cae8eed8d/docutils-0.14-py3-none-any.whl (543kB)
    100% |████████████████████████████████| 552kB 3.5MB/s 
Installing collected packages: lockfile, docutils, python-daemon
Successfully installed docutils-0.14 lockfile-0.12.2 python-daemon-2.2.3

아래는 python-daemon 을 이용해서 데몬 프로그램을 시작 또는 종료 시킬 수 있도록 만든 간단한 예제입니다.

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import sys
import os
import time
import daemon
from daemon import pidfile

pid_file = '/var/run/domain_test.pid'

def do_something():
    while True:
        time.sleep(2)

def start_daemon():
    print('start_daemon')
    with daemon.DaemonContext(
        working_directory = '/tmp',
        umask = 0o002,
        pidfile = pidfile.TimeoutPIDLockFile(pid_file),
        ) as context:
        do_something()
    
def main():
    try:
        if sys.argv[1] == 'start':
            start_daemon()
        
        elif sys.argv[1] == 'stop':
            pid = '999999'
            
            f = open(pid_file, 'r')
            
            for line in f:
                pid = line = line.strip()

            f.close()
     
            cmd = 'kill '+ pid
            
            os.system(cmd)
            
    except Exception as e:
        print(e)
        
if __name__ == "__main__":
    main()

start 옵션을 이용해서 데몬 프로그램을 시작 후 확인해 봅니다.

# ./daemon_test.py start
start_daemon

# ps auxw | grep daemon_test
root      5675  0.0  0.7  55904  7628 pts/0    S+   05:43   0:00 vi daemon_test.py
root      5949  0.0  2.5  59592 25024 ?        S    06:07   0:03 python ./daemon_test.py start
root      5951  0.0  0.0  14856   820 pts/1    S+   06:07   0:00 grep --color=auto daemon_test

stop 옵션을 사용하면 프로그램을 종료할 수 있습니다.

# ./daemon_test.py stop

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다