2013-06-27 2 views
3

나는 갇혀있어 도움이 필요하다.Python-daemon 작동 원리

저는 python-daemon 패키지를 사용하여 프로그램을 대몬 화합니다. 문제는 데몬을 시작하고 중지하는 방법을 모른다는 것입니다. 내가

python myscript.py start 

을 실행하면

은 새로운 프로세스가 생성됩니다. 그러나 내가 멈출 때 아무 일도 일어나지 않습니다.

# Setting logging configuration 
logger = logging.getLogger("MyScript") 

logger.setLevel(logging.DEBUG) 

formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") 
handler = logging.FileHandler("/tmp/myscript.log") 
handler.setFormatter(formatter) 
logger.addHandler(handler) 

pid = daemon.pidlockfile.TimeoutPIDLockFile("/tmp/myscript.pid", 10) 
context = daemon.DaemonContext(
    #working_directory='/var/lib/foo', 
    umask=0o002, 
    pidfile=pid, 
    files_preserve=[handler.stream], 
    ) 

loop = True 
def program_cleanup_test(): 
    logger.info("Stopping loop") 
    loop = False 

context.signal_map = { 
    signal.SIGTERM: program_cleanup_test, 
    signal.SIGHUP: 'terminate', 
    #signal.SIGUSR1: reload_program_config, 
    } 

print "Running as a daemon" 
with context: 
    while loop: 
     logger.info("0255") 
     time.sleep(5) 
+0

이것은 도움이 될 수 있습니다 : http://stackoverflow.com/questions/4705564/python-script-as-linux-service-daemon – joe

+0

@ joe는 파이썬 데몬을 사용하지 않고 시스템 도구를 사용하여 데몬을 만듭니다. – jlanza

답변

0

신호를 보내보십시오. SIGTERM을 보내면 program_cleanup_test() 함수가 호출됩니다. SIGHUP을 보내면 데몬이 종료됩니다.

이 쉘 명령 신호를 보냅니다

kill -s TERM your_daemon_pid 

을이 당신의 program_cleanup_test() 함수를 실행해야합니다

kill [-s signal] PID 


그래서 당신은 실행할 수 있습니다.

도움이되기를 바랍니다.


은 또한 당신은 사용할 필요가 없습니다 : 단지

python myscript.py start 

하지만를 : 시작 [1] sys.argv에 간다하고이 스크립트를 변경하지 않습니다

python myscript.py 

때문이다. sys.argv가 무엇인지 알고 싶다면 여기에 좋은 설명이 있습니다 : https://stackoverflow.com/a/4118133/4898487