我已经成功创建并配置了一个 systemd 模板,可以轻松生成类似服务的实例。
模板如下所示:
[Unit]
Description=my awesome service %I
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/binary -c /path/to/config/%i.conf
ExecStop=/usr/bin/pkill --full %i
Restart=on-failure
User=root
Group=root
TimeoutSec=30
[Install]
WantedBy=multi-user.target
我使用 systemcl enable name@kkk、systemctl start name@kkk 启用并启动了实例,但没有创建 /path/to/config/kkk.conf 文件,因此服务失败:
~# systemctl status [email protected]
● [email protected] - my awesome service kkk
Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
Active: inactive (dead) (Result: exit-code) since Wed 2017-10-04 15:20:09 CEST; 3min 27s ago
Process: 30116 ExecStop=/usr/bin/pkill --full %i (code=exited, status=1/FAILURE)
Process: 30113 ExecStart=/usr/local/bin/binary -c /path/to/config/kkk.conf (code=exited, status=1/FA
Main PID: 30113 (code=exited, status=1/FAILURE)
Oct 04 15:20:08 host systemd[1]: [email protected]: Unit entered failed state.
Oct 04 15:20:08 host systemd[1]: [email protected]: Failed with result 'exit-code'.
Oct 04 15:20:09 host systemd[1]: [email protected]: Service hold-off time over, scheduling restart.
Oct 04 15:20:09 host systemd[1]: Stopped my awesome service for kkk.
如果我运行 systemctl --failed,我会得到
0 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
这显然是不正确的,因为服务失败了。我在这里做错了什么或者遗漏了什么吗? TIA。
答案1
这是 systemd 中的一个错误,所有重新启动都失败的服务会被列为“非活动”而不是“失败”。在我的测试中,它出现在 229(Ubuntu Xenial 的默认值),并修复为 238;也许一些变更日志窥探会揭示哪个版本修复了它。
最好的解决方法似乎是Restart
从服务文件中删除并手动重新启动。
答案2
该服务未处于失败状态。正如你在这里看到的:
Active: inactive (dead) (Result: exit-code) since Wed 2017-10-04 15:20:09 CEST; 3min 27s ago
这是inactive (dead)
。如果失败,你会得到类似这样的信息:
Active: failed (Result: exit-code)
想要同时看到两个失败的和不活跃的您应该使用以下命令的服务:
systemctl --failed --all