2013-06-27 29 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

@喬說一個人不使用python-daemon,它使用系統工具創建一個守護進程。 – jlanza

回答

0

嘗試向它發送一個信號。如果你發送SIGTERM,你的函數program_cleanup_test()將被調用。如果你發送SIGHUP,你的守護進程將終止。

這個shell命令發出信號:

kill [-s signal] PID 

所以,你可以運行:

kill -s TERM your_daemon_pid 

,這應該運行program_cleanup_test()函數。

我希望這會有所幫助。


你也並不需要使用:

python myscript.py start 

只是:

python myscript.py 

因爲開始進入sys.argv中[1],並不會改變你的腳本。如果你想知道什麼是sys.argv,這裏是一個很好的解釋:https://stackoverflow.com/a/4118133/4898487