我已经创建了一个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 在进程退出后仍然认为该服务处于活动状态。