我有以下myweb.service
文件
[Unit]
Description=myweb - A simple hello world program
After=bluetooth.service
[Service]
Type=simple
User=root
ExecStart=/usr/bin/docker run -p 2222:4343 manikanth/webapp
Restart=on-failure
[Install]
#WantedBy=multi-user.target
我特意禁用bluetooth.service
并检查了。但该服务仍然处于活动状态。我认为这可能是由于WantedBy
,因此我发表了评论。问题仍然存在
什么是正确的方法不培养如果依赖服务例如bluetooth.service
未激活,则该服务?
答案1
您可能正在寻找该Requisite=
选项和该After=
选项。
来自手册页
类似于 Requires=。但是,如果此处列出的单元尚未启动,则它们将不会启动,并且事务将立即失败。
Requires=
在这种情况下不起作用是因为它将bluetooth.service
在您启动时启动myweb.service
。Requisite=
选项不会尝试启动bluetooth.service
.但是,它会显示myweb.service
失败。
答案2
myweb.service
如果我没记错的话,您只会在启动时才激活,bluetooth.service
否则不会触发myweb.serbice
。如果这是正确的,请阅读下面的答案,否则请纠正我!
您确实应该Requires
与 一起使用After
。使用After
仅配置单元文件之间的排序依赖关系,但Requires
将确保如果依赖单元失败,那么也会失败。所以,Requires=bluetooth.service
添加myweb.service
并systemctl daemon-reload