Systemd 自动重启服务在停止时不起作用

Nik*_*tas 2 systemd services systemctl

我想向自动启动服务的项目添加一个功能。

我的服务文件包含:

[Unit]
Description=example Server
After=network.target

[Service]
Type=idle
ExecStart=/opt/xxx/xxx/sample.sh   
Restart=always
RestartSec=3

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

我遵循的步骤是:

  1. 重新加载守护进程: systemctl daemon-reload

  2. 启用服务: systemctl enable sample

  3. 启动服务: systemctl start sample

  4. 检查状态:service sample status,这表明我的服务正在运行...

如果服务崩溃或停止,我想自动启动它。

当我使用 停止我的服务时systemctl stop sample,它不会自动启动。知道如何实现这一目标吗?

Ste*_*itt 5

Restart设置不起作用这样的; 引用手册

当进程因 systemd 操作(例如服务停止或重启)而死亡时,服务将不会重新启动。

systemctl允许您指定您希望服务处于的状态:systemctl start指定它应该运行,systemctl stop指定它不应该运行。systemd 然后采取任何必要的步骤来使系统状态与您的请求保持一致。

目的Restart是维护请求的系统状态,而不是让服务在所有情况下都运行。

如果你想验证 systemd 是否会在你的服务挂掉后重启你的服务,你需要直接杀死服务的主进程,而不是让 systemd 停止它:

systemctl kill sample
Run Code Online (Sandbox Code Playgroud)