进一步阅读

进一步阅读

我想开始我的服务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。他们确实这样做不是指定这些作业的顺序。顺序由其他设置控制,即名称相当明显的BeforeAfter

依赖关系指定启动和停止作业的总体集合是通过简单命令(例如 )构建的systemctl start graphical.target。顺序指定这些作业的执行时间和顺序。

进一步阅读

  • 伦纳特·珀特林 (2013-10-07)。 systemd.unit。 systemd 手册页。 freedesktop.org。
  • 伦纳特·珀特林 (2013-10-07)。 systemd.service。 systemd 手册页。 freedesktop.org。

相关内容