간만에 좋은 코드 하나 올려 드립니다.
Python으로 Daemon을 만드는 예제 코드 입니다.
일단 해당 예제를 실행시키기 위해서 다운로드 받아야 하는 페키지가 있는데 아래와 같이 받으면 됩니다.
위의 패키지를 다운로드 하시면 준비는 끝입니다.
본격적으로 코드는 아래와 같습니다.
# To kick off the script, run the following from the python directory: # PYTHONPATH=`pwd` python testdaemon.py start #standard python libs import logging import time #third party libs from daemon import runner class App(): def __init__(self): self.stdin_path = '/dev/null' self.stdout_path = '/dev/tty' self.stderr_path = '/dev/tty' self.pidfile_path = '/var/run/testdaemon/testdaemon.pid' self.pidfile_timeout = 5 def run(self): while True: #Main code goes here ... #Note that logger level needs to be set to logging.DEBUG before this shows up in the logs logger.debug("Debug message") logger.info("Info message") logger.warn("Warning message") logger.error("Error message") time.sleep(10) app = App() logger = logging.getLogger("DaemonLog") logger.setLevel(logging.INFO) formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") handler = logging.FileHandler("/var/log/testdaemon/testdaemon.log") handler.setFormatter(formatter) logger.addHandler(handler) daemon_runner = runner.DaemonRunner(app) #This ensures that the logger file handle does not get closed during daemonization daemon_runner.daemon_context.files_preserve=[handler.stream] daemon_runner.do_action()
22 ~ 24번째 라인에 Daemon에서 실행시켜야 하는 부분을 넣으면 정상적으로 실행됩니다. 나머지 부분은 크게 어려울이 없을 것으로 예상되어 집니다.
로그 디렉토리(/var/log/testdaemon), PID 디렉토리(/var/run/testdaemon)은 만들어 놓으셔야 합니다.
아래는 Daemon을 inittab 부분에 넣는 부분입니다.
#! /bin/bash # Copyright (c) 1996-2012 My Company. # All rights reserved. # # Author: Bob Bobson, 2012 # # Please send feedback to bob@bob.com # # /etc/init.d/testdaemon # ### BEGIN INIT INFO # Provides: testdaemon # Required-Start: # Should-Start: # Required-Stop: # Should-Stop: # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: Test daemon process # Description: Runs up the test daemon process ### END INIT INFO # Activate the python virtual environment . /path_to_virtualenv/activate case "$1" in start) echo "Starting server" # Start the daemon python /usr/share/testdaemon/testdaemon.py start ;; stop) echo "Stopping server" # Stop the daemon python /usr/share/testdaemon/testdaemon.py stop ;; restart) echo "Restarting server" python /usr/share/testdaemon/testdaemon.py restart ;; *) # Refuse to do other stuff echo "Usage: /etc/init.d/testdaemon.sh {start|stop|restart}" exit 1 ;; esac exit 0
'PYTHON > CODE' 카테고리의 다른 글
[디렉토리 존재 유무 확인] (0) | 2013.03.22 |
---|---|
[CODE]Unique 리스트 값 찾기 (0) | 2012.12.14 |
[CODE] 디렉토리 리스트 가져오기 (0) | 2012.12.13 |
[CODE] 간단한 파일 서버 만들기 (0) | 2012.11.23 |
[CODE] 파이썬 윈도우 서비스 등록 (0) | 2012.11.15 |