我有两个 systemd 服务,一个是用于代理对 C 后端的调用的 flask 应用。虽然 flask 应用可以运行,但 C 程序不会在启动时启动。
我的服务文件如下所示:
[Unit]
Description=my backend
After=multi-user.target
[Service]
User=root
ExecStart=/home/root/camtool
Type=dbus
BusName=com.camera
Restart=always
RestartSec=10
我已经启用了这样的服务:
systemctl enable camtool.service
如果我执行 a,服务就会启动systemctl start camtool.service
,但如果我重新启动设备,服务就不会启动。
输出systemctl status camtool
:
● camtool.service - my backend
Loaded: loaded (/etc/systemd/system/camtool.service; enabled; vendor preset: disabled)
Active: inactive (dead)
如果我检查 journalctl,则没有任何条目。
journalctl -u camtool
-- Logs begin at Wed 2021-07-14 14:12:26 UTC, end at Wed 2021-07-14 14:16:26 UTC. --
-- No entries --
我不确定如何进一步调试,因为似乎没有任何错误消息。我该如何继续找出程序无法启动的原因?有没有办法可以验证是否尝试过?
C 程序使用 DBUS 来公开 flask 应用程序的函数,并通过套接字传输数据。
答案1
看来我通过重新启用该服务解决了问题。我进行了许多更改以尝试修复该文件,但当我禁用并重新启用时,我意识到符号链接位于错误的位置。
通过禁用和启用,此问题已得到解决。我建议在目标相关区域发生更改时禁用并重新启用。
在我这样做之前我添加了wantedby=multi-user.target
。
命令如下:
root@system:~# systemctl disable camtool
Removed /etc/systemd/system/multi-user-target.service.wants/camtool.service.
root@system:~# systemctl enable camtool
Created symlink /etc/systemd/system/multi-user.target.wants/camtool.service → /etc/systemd/system/camtool.service.
现在它可以随系统启动。