我被困住了,需要帮助。
我正在使用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 :(得分: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