systemctl --failed 未列出失败的实例化服务

systemctl --failed 未列出失败的实例化服务

我已经成功创建并配置了一个 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

相关内容