Systemd 不会重启服务,尽管 Restart=always

gue*_*tli 10 fault-tolerance systemd

这是我的 systemd 服务的单元文件:

[Unit]
Description=Tunnel For %i
After=network.target

[Service]
User=autossh
ExecStart=/usr/bin/autossh -M 0 -N -o "ExitOnForwardFailure yes" -o "ConnectTimeout=1" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 40443:installserver:40443 -R 8080:installserver:8080 tunnel@%i
Restart=always

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

该单元在 15 天前出现故障并且 systemd 没有重新启动它,尽管“Restart=always”在上面的单元文件中。

这里是这个服务的状态输出:

salt:/srv # systemctl status autossh@eins-work
autossh@eins-work.service - Tunnel For eins-work
      Loaded: loaded (/etc/systemd/system/autossh@.service; enabled)
      Active: failed (Result: start-limit) since Wed, 2016-02-10 14:33:34 CET; 2 weeks and 1 days ago
    Main PID: 17980 (code=exited, status=0/SUCCESS)
      CGroup: name=systemd:/system/autossh@.service/eins-work

Feb 10 14:33:34 salt systemd[1]: Stopping Tunnel For eins-work...
Feb 10 14:33:34 salt systemd[1]: Starting Tunnel For eins-work...
Feb 10 14:33:34 salt systemd[1]: Failed to start Tunnel For eins-work.
Feb 10 14:33:34 salt systemd[1]: Unit autossh@eins-work.service entered failed state
Run Code Online (Sandbox Code Playgroud)

相关:https : //serverfault.com/a/563401/90324

如果出现故障,如何将 systemd 服务配置为始终重新启动?

Mic*_*ton 4

该服务连续多次启动失败,因此 systemd 放弃了尝试。这就是这个Result: start-limit意思。

请注意,已配置Restart=且达到启动限制的单元将不再尝试重新启动;但是,它们仍然可以在稍后的时间点手动重新启动,从那时起,重新启动逻辑将再次激活。请注意,这systemctl reset-failed将导致服务的重新启动率计数器被刷新,如果管理员想要手动启动一个单元并且启动限制会干扰该操作,则这非常有用。

您应该解决导致服务无法启动的问题。

如果您需要调整 systemd 尝试重新启动失败服务的次数和速度,请参阅StartLimitInterval=和选项StartLimitBurst=StartLimitAction=