我想向项目添加一项自动启动服务的功能。
我的服务文件包含:
[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
我遵循的步骤是:
重新加载守护进程:
systemctl daemon-reload
启用服务:
systemctl enable sample
启动服务:
systemctl start sample
检查状态:
service sample status
,这表明我的服务正在运行...
我想在服务崩溃或停止时自动启动该服务。
当我使用 停止服务时systemctl stop sample
,它不会自动启动。知道如何实现这一目标吗?
答案1
该Restart
设置不是这样工作的;引用手册,
当进程的死亡是由于systemd操作(例如服务停止或重新启动)而导致时,服务将不会重新启动。
systemctl
允许您指定您希望服务所处的状态:systemctl start
指定它应该运行,systemctl stop
指定它不应该运行。然后,systemd 会采取任何必要的步骤来使系统状态与您所请求的状态保持一致。
的目的Restart
是维护所请求的系统状态,而不是保持服务在所有情况下运行。
如果您想验证 systemd 是否会在您的服务死机时重新启动您的服务,您需要直接kill服务主进程,不要求 systemd 停止它:
systemctl kill sample