调试启动时停止的 systemd 服务

调试启动时停止的 systemd 服务

我编写了这个简单的 systemd 服务来在启动时启动我的应用程序:

[Unit]
Description=Autostart
After=multi-user.target

[Service]
Environment=LD_LIBRARY_PATH=/home/pi/bin
ExecStart=/home/pi/bin/Server
Restart=on-failure
RestartSec=3
User=root
Group=root

[Install]
WantedBy=multi-user.target

我启用了该服务并重新启动。启动时,MyApp 没有运行,服务状态为“已停止”:

● autostart.service - Autostart
   Loaded: loaded (/lib/systemd/system/autostart.service; enabled; vendor preset: enabled)
   Active: inactive (dead)

没有进一步的指示。据我所知,如果我的应用程序崩溃,状态应该报告退出错误代码。此外,它应该在 3 秒后重新启动。

相反,手动启动服务会导致预期的行为:

● autostart.service - Autostart
   Loaded: loaded (/lib/systemd/system/autostart.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2017-10-20 12:06:39 CEST; 2min 32s ago
 Main PID: 1189 (Server)
   CGroup: /system.slice/autostart.service
           ├─1189 /home/pi/bin/Server
           └─1198 /home/pi/bin/Client

Oct 20 12:06:40 localhost Server[1189]:   some output from my application

您将如何调试这种行为?

答案1

您需要添加

[单元]

想要=网络.目标

之后=网络.目标

到您的单元文件。顺便说一句,当您的服务发现没有可用网络时,它必须正常退出,systemd 不会自动重新启动,因为除非您的服务因错误退出,否则它不是故障。

您的服务应返回非零值,以便 systemd 认为它失败。例如,可以在 main 中返回 1,或者在 C 中的任何位置退出 (1)。

相关内容