systemd 服务的自动启动和手动启动之间有什么区别?

What could be the difference between automatic and manua startup of systemd service?

我在 Raspberry PI(Raspbian GNU/Linux 10) 上创建了一个简单的 systemd 服务,它启动了一个二进制

[Unit]
Description=Bestest description ever

[Service]
User=root
WorkingDirectory=/tmp
ExecStart=/home/pi/Documents/Repos/rpi3b-app/bin/rpi3b_app
Restart=always

[Install]
WantedBy=multi-user.target

当我启动 PI 时,它启动得很好,但应用程序的行为很奇怪。这是我编写的 LED 灯条控制器应用程序,有问题的部分是 GPIO 引脚。真的不想写更多的细节,因为我认为问题与 systemd 服务有关。

如果我手动停止服务然后重新启动它一切正常。通过停止并重新开始,我的意思是以下命令:

sudo systemctl stop controller.service

sudo systemctl start controller.service

真不明白这和开机自动启动有什么区别。希望有人知道从哪里开始调查。

不知道你的二进制文件就很难说,但由于我遇到了类似的问题,所以这是我的两分钱:

您的二进制文件可能依赖于您的 systemd 服务启动时尚未准备好的其他服务。您可以在服务文件中使用 after 之类的关键字来解决,因此请等待其他服务。如果手动启动一切正常,这一事实让我认为这纯粹是时间问题,您的服务可能启动得太早,早于其他可能依赖的服务。例如,在可能的情况下是网络服务。