【问题标题】:How to restart Systemd service only once on-failure?如何仅在失败时重新启动 Systemd 服务?
【发布时间】:2021-11-20 15:16:34
【问题描述】:

我有一个服务应该在出现问题时只重新启动一次。 这是我的服务:

[Unit]
Description=Do job on boot
AllowIsolate=yes
StartLimitBurst=1    # or 2
StartLimitIntervalSec=3

[Service]
User=root
Type=idle

ExecStart=/usr/bin/python3 /var/www/flask/initJobs.py
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

但是这个失败会继续重启。

systemd 版本 241。

尝试添加StartLimitAction=none,但没有任何改变。

【问题讨论】:

  • 嗨@Zorro,据我所知这是不可能的。间隔必须有时间限制……但我可以长达100年……这接近无限吧?对您来说是否只允许每 100 年重试一次?如果是这样:freedesktop.org/software/systemd/man/…stackoverflow.com/questions/39284563/… 可以提供帮助。
  • 好技巧!如果RestartSec 在第一次重启后计数,则可以工作。如果我需要重新启动 2 次,将无法正常工作。我认为重新启动后可能会中止。
  • 我认为你可以让它在任何次数的重试中工作。
  • StartLimitIntervalSec=100y, StartLimitBurst=1 只会触发一次重启 StartLimitIntervalSec=100y, StartLimitBurst=10 会触发 10
  • 在第一次重启时使用 StartLimitIntervalSec=100y 和 StartLimitBurst=1 我得到:Failed to start Job ServicemyJob.service: Start request repeated too quickly

标签: linux systemd


【解决方案1】:

好的,我找到了,所以只在 3 秒后失败时重新启动一次服务。

[Unit]
Description=Do job on boot
StartLimitBurst=2
StartLimitInterval=11          # StartLimitInterval >  RestartSec * StartLimitBurst
#OR
#StartLimitIntervalSec=11  

[Service]
User=root
Type=idle

ExecStart=/usr/bin/python3 /var/www/flask/initJobs.py
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

这里的关键是StartLimitIntervalSec 必须是> 到RestartSec * StartLimitBurstStartLimitBurst 算第一个开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 2017-08-11
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 2018-05-31
    相关资源
    最近更新 更多