在systemctl停止服务上正确退出python脚本

问题描述 投票:2回答:1

当按下CTLC + C时,我的脚本通过except KeyboardInterrupt退出,如下所示:

....

try:
    thread1.start()
    thread2.start()
    while True:
        time.sleep(1)

except (KeyboardInterrupt, SystemExit, Exception):
    print("exiting")
    # handle proper threads exit

但是,当脚本作为systemd运行并且我调用systemctl stop myscript.service时,'exiting'消息不会记录到syslogger中,所以我知道except没有被执行。 SystemExitException似乎没有在服务停止时发布。 systemctl发布了什么,所以我可以在我的脚本的try - except部分中捕获它?

另外,在调用systemctl stop时,我是否需要关心正确的线程退出,否则它会很好地处理我的脚本?

python exception try-catch exit
1个回答
0
投票

您可以在systemd配置文件中指定KILL_MODE选项,该选项指定将哪个信号发送到进程以退出它。然后,您可以使用signal模块修改python脚本以捕获指定的信号,并相应地执行退出代码。

至于其他线程,它取决于它们的重要程度以及它们如何实例化。如果它们被实例化为守护进程并且它们没有任何后果在任何给定时间终止,那么你可以让它们死掉。否则,您应该明确编码逻辑,以便在收到信号时正确关闭它们。

© www.soinside.com 2019 - 2024. All rights reserved.