我想开始我的服务samplerbox.service
[Unit]
Description=Starts SamplerBox
[Service]
Type=simple
ExecStart=/root/SamplerBox/samplerbox.sh # this script does: python /root/SamplerBox/samplerbox.py
WorkingDirectory=/root/SamplerBox/
[Install]
WantedBy=multi-user.target
前 networking.service
(DHCP的事情,IP归属等)已经完成了。
备注:我的程序根本不使用网络。
这是情节(这里尺寸更大):
正如您所看到的,samplerbox.service
正在等待networking.service
完成。 (我测试了好几次,都是一样的)。
我尝试过:WantedBy=multi-user.target
用其他东西 替换WantedBy=sound.target
,然后systemctl disable samplerbox.service
重新启用它......但这不成功!
如何强制某个服务先启动networking.service
?
答案1
samplerbox.service
网络完成后启动。
确实如此,但只是偶然,而不是实际发生的事情。如果你看小心在图表中您会发现它samplerbox.service
是在 后开始的basic.target
。这是正常现象,是 systemd 设计的。大多数(非系统)服务都设置了“默认依赖项”,它们是未在服务单元中写出的隐式依赖项和顺序。依赖项basic.target
及其后的排序是 systemd 应用的此类默认值之一,除非在服务单元中明确禁用默认值。
您还将顺序和依赖性混为一谈。各种“想要”指令(例如WantedBy
您一直在使用的指令及其相反指令Wants
)指定依赖关系。他们让 systemd 排队一个作业,以便在请求启动服务 A 时也启动服务 B。他们确实这样做不是指定这些作业的顺序。顺序由其他设置控制,即名称相当明显的Before
和After
。
依赖关系指定启动和停止作业的总体集合是通过简单命令(例如 )构建的systemctl start graphical.target
。顺序指定这些作业的执行时间和顺序。
进一步阅读
- 伦纳特·珀特林 (2013-10-07)。
systemd.unit
。 systemd 手册页。 freedesktop.org。 - 伦纳特·珀特林 (2013-10-07)。
systemd.service
。 systemd 手册页。 freedesktop.org。