![创建需要在 mongod 之后启动的服务](https://linux22.com/image/227892/%E5%88%9B%E5%BB%BA%E9%9C%80%E8%A6%81%E5%9C%A8%20mongod%20%E4%B9%8B%E5%90%8E%E5%90%AF%E5%8A%A8%E7%9A%84%E6%9C%8D%E5%8A%A1.png)
我正在创建一个服务来在 while 循环中运行 python 脚本。但我需要该脚本仅在 mongod 运行后启动。我看到大家都把multi-user.target放在WantedBy中,但是我看到mongod文件,他的WantedBy设置为multi-user.target。那么,仅将脚本的 WantedBy 设置为 mongod.service 就足够了,还是需要将 WantedBy 设置为 multi-user.target 并将 After 设置为 mongod.service ?
谢谢
答案1
您想要的是为您的服务创建一个 systemd 单元文件。在该文件中,指定After=mongod.service
(服务文件名可能因您的发行版而异)。
Requires=multi-user.target
仅确保您的服务在达到多用户运行时后启动。服务启动的顺序不确定,因此您的服务可能会mongod
在一次之前启动systemctl start myservice
,而在下一次之后启动mongod
(取决于任何其他单元配置)。
Requires=mongod.service
也不是你想要的:
请注意,此依赖性类型并不意味着当该单元运行时另一个单元必须始终处于活动状态。具体来说:失败的条件检查(例如 ConditionPathExists=、ConditionPathIsSymbolicLink=、... — 见下文)不会导致具有 Requires= 依赖项的单元的启动作业失败。此外,某些单元类型可能会自行停用(例如,服务进程可能决定完全退出,或者设备可能被用户拔出),这不会传播到具有 Requires= 依赖性的单元。将 BindsTo= 依赖类型与 After= 一起使用,以确保一个单元永远不会处于活动状态,而没有特定的其他单元也处于活动状态(见下文)。
https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html