如何使 Systemd 服务永远运行(“启动尚未完成。请稍后再试。”)

如何使 Systemd 服务永远运行(“启动尚未完成。请稍后再试。”)

我已经创建了一个systemd服务不得不永远运行(因为它在我的嵌入式计算机上完成主要工作):

# /etc/systemd/system/samplerbox.service
########################################
[Unit]
Description=Starts SamplerBox

[Service]
Type=oneshot
ExecStart=/root/SamplerBox/samplerbox.sh
WorkingDirectory=/root/SamplerBox/

[Install]
WantedBy=multi-user.target

它实际上是这样做的:

# /root/SamplerBox/samplerbox.sh
################################
#!/bin/sh
python /root/SamplerBox/samplerbox.py

我启用了此服务

systemctl enable /etc/systemd/system/samplerbox.service

它有效,并且在启动时启动。


但是,由于我启用了此服务,当我这样做时systemd-analyze,我看到:

Bootup is not yet finished. Please try again later.

此外,我得到的信息显示该服务仍然被视为“激活”/启动:

# systemctl status samplerbox
â samplerbox.service - Starts SamplerBox
   Loaded: loaded (/etc/systemd/system/samplerbox.service; enabled)
   Active: activating (start) since Thu 1970-01-01 00:14:01 UTC; 11min ago
 Main PID: 258 (samplerbox.sh)
   CGroup: /system.slice/samplerbox.service
           ââ258 /bin/sh /root/SamplerBox/samplerbox.sh
           ââ260 python /root/SamplerBox/samplerbox.py

如何正确地让服务永远运行?

答案1

解决办法很简单:必须更换

[Service]
Type=oneshot

经过

[Service]
Type=simple

这个文档状态:

Type=simple(默认):systemd 认为该服务立即启动。该进程不得分叉。如果需要在此服务上订购其他服务,请勿使用此类型,除非它是套接字激活的。

...

Type=oneshot:这对于执行单个作业然后退出的脚本很有用。您可能还需要设置 RemainAfterExit=yes,以便 systemd 在进程退出后仍然认为该服务处于活动状态。

相关内容