小编Jak*_*ruk的帖子

让 systemd 服务稍后停止,而不阻塞“systemctl stop”

我有一堆服务负责运行从队列中消耗的操作。

我希望能够轻轻地重新启动服务(不中断已经在运行的操作)

可以通过处理 systemd 发送的 SIGTERM 并保存程序在处理当前操作后应退出的信息来解决。
还有一个小问题是,TimeoutStopSec在服务配置文件中定义的一段时间后,systemd 将发送额外的 SIGKILL 来残酷地终止我的进程。
我可以通过设置轻松避免它TimeoutStopSec=infinity。然后systemctl stop等到脚本自行终止,这可能会持续一个多小时,并导致我遇到主要问题。

我不希望systemctl命令等到脚本结束

看起来SendSIGKILL=no配置可以完成这项工作。这会导致SIGTERM在之后重试TimeoutStopSec,然后创建新的工作线程,并让旧的工作线程继续运行。

日志控制日志

May 06 14:14:43 jaku systemd[1]: Stopping Jaku test worker...
May 06 14:14:43 jaku python3[31597]: * 15 <frame object at 0x14d8108>
May 06 14:14:53 jaku systemd[1]: jaku-test-worker.service: State 'stop-sigterm' timed out. Skipping SIGKILL.
May 06 14:14:53 jaku python3[31597]: * 15 <frame object at 0x14d8108>
May 06 14:15:03 jaku systemd[1]: jaku-test-worker.service: State …
Run Code Online (Sandbox Code Playgroud)

python signals systemd

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

python ×1

signals ×1

systemd ×1