关闭之前等待 systemd oneshot 服务

关闭之前等待 systemd oneshot 服务

我正在尝试使用 systemd 计时器和服务设置进程的自动执行。问题是我的一次性服务在关闭时立即被终止。我如何告诉 systemd 不要终止 oneshot 服务,而是等待它完成后再关闭?

我的 test.service 看起来像这样:

[Unit]
Description=My automatic updates
After=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/bin/sleep 40
TimeoutSec=0

答案1

所以我找到了两种可能的解决方案。

  1. 告诉您的脚本忽略 TERM 信号并设置TimeoutStopSec=infinity为避免 systemd SIGKILL 您的进程在不响应 SIGTERM 后。忽略 TERM 信号可以通过trap在 bash 中使用或在 Python 中使用类似的命令来完成:

    import signal
    def signal_handler(signum, frame):
      pass
    signal.signal(signal.SIGTERM, signal_handler)
    

    您应该实现一个逻辑,以便在收到 TERM 信号时尽快退出脚本。

  2. 如果您无法修改可执行文件,请设置KillSignal=为非破坏性的内容SIGCONT(我认为这是一种黑客行为,不推荐这样做)。

相关内容