首页 > 解决方案 > Python 处理系统关闭,但不崩溃(或者我想在出现意外情况时如何恢复状态)

问题描述

所以我有一个 Flask API 通过一个 Systemd 服务运行,该服务运行在一个由电池供电的硬件上(用于控制其他硬件)。我有一堆需要保存的状态,如果出现问题,比如停电,我需要能够恢复该状态。

现在我将状态保存为 JSON 文件,以便在启动时加载它们(如果它们存在)。但我还需要能够再次删除它们,以防它收到关机信号。

我在某处看到可以将 KillSignal 设置为 SIGINT 并将关机作为键盘中断处理。或者关于 ExecStop 的东西。这样就足够了,还是有更好的方法来处理这种情况?

标签: pythonsystemdshutdown

解决方案


如果您查看 linux 系统的关闭日志,您会看到“向所有进程发送 sigterm...向所有进程发送 sigkill”。在正常的关闭过程中,在被杀死之前会获得几秒钟的宽限期。因此,如果您捕获 sigterm,您可以运行关闭代码,但最好在无法捕获的 sigkill 出现之前结束。由于总是发送sigterm 来终止正在运行的进程,因此捕获它确实是退出时清理的正确方法 (TM)。但是由于您使用的是 systemd 服务,因此您也可以在服务中进行清理。


推荐阅读