systemd 无法在失败时重新启动服务

systemd 无法在失败时重新启动服务

我有一个名为refreshPacman.service 的服务文件,它pacman -Sy在启动时运行一次。然而,由于After=network-online.target仅考虑我与路由器的连接(而不是我的 VPN),pacman 将无法连接到镜像。我最初尝试通过使用refreshPacman.timer后简单等待 60 秒来解决这个network-online.target问题,但这会导致 pacman 要么在我的笔记本电脑已经超过登录时间后刷新(对我来说太慢),要么如果我由于某种原因忘记如何刷新而失败类型。

我试图通过修改以前的服务文件来创建更好的解决方案,这会让 systemd 在成功或放弃之前尝试加载服务几次。在无法让我的服务正常工作后,我目前有这个:

[Unit]
Description=refreshes pacman's database
Wants=network-online.target
Wants=mullvad-daemon.service
After=network-online.target
After=mullvad-daemon.service

StartLimitIntervalSec=180s
StartLimitBurst=3

[Service]
Type=oneshot
ExecStart=/usr/bin/pacman -Sy
RemainAfterExit=true

StandardOutput=journal

Restart=on-failure
RestartSec=60s

[Install]
WantedBy=multi-user.target

据我了解,这应该:

1. run the `ExecStart` once, (fail)
2. wait `RestartSec` seconds, (maby fail?)
3. repeat step 2 `StartLimitBurst` number of times

然而,根据两者journalctl -u refreshPacman.service -b/var/log/pacman.log刷新命令在放弃之前仅运行一次。我已确保在更新其内容后禁用并重新启用该服务(以防 systemd 不喜欢我编辑符号指向的文件),但我无法让它工作。我对 systemd 一般如何工作的了解仍然非常有限,所以我不确定我是否误解了失败或重新启动一般如何工作。

编辑

我正在摆弄不同的服务文件,出于某种原因将时间更新为:

# nothing changed here

StartLimitIntervalSec=120s
StartLimitBurst=12

# nothing changed here

RestartSec=10s

允许服务正常工作。我想我在测试中使用了如此臃肿的计时器,当我打开日志文件时它仍然没有重新加载......

编辑2

我无法选择我的答案,因此不知道如何关闭此问题。

答案1

systemd(可能)等待太长时间才能重新启动任务(回答以便我可以关闭问题)

相关内容