需求
- mashang.service及nginx.service两者均需要开机自动启动
- 自定义服务mashang.service需要在nginx.service服务启动后才能启动
实验
- 在 systemd 中,可以使用 Wants= 或 Requires= 以及 After= 指令来定义服务之间的依赖关系。
- 仅仅使用 After= 并不会阻止 mashang.service 的启动,如果它被明确地启动或者作为一个依赖服务的一部分。如果您还想确保 mashang.service 只在 nginx.service 成功启动后才启动,您还需要使用 Wants= 或 Requires=。
vim /etc/systemd/system/mashang.service
内容如下:
[Unit]
Description=Mashang Service
After=network.target nginx.service
Wants=nginx.service
[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/java/bin/mashang/service.sh start
ExecReload=/usr/local/java/bin/mashang/service.sh reload
ExecStop=/usr/local/java/bin/mashang/service.sh stop
Restart=on-failure
[Install]
WantedBy=multi-user.target
解析:
- After=network.target nginx.service 确保 mashang.service 在网络目标(network.target)和 nginx.service 都启动之后再启动。
- Wants=nginx.service 表示 mashang.service 想要 nginx.service 也被启动,但即使 nginx.service 启动失败,mashang.service 也会尝试启动。如果您希望 nginx.service 失败时 mashang.service 也失败,您应该使用 Requires=nginx.service 代替 Wants=。
- Wants= 和 Requires= 的主要区别在于,如果 Requires= 指定的服务启动失败,那么当前服务 mashang.service 也会被视为启动失败。而 Wants= 仅仅是表明当前服务希望另一个服务也被启动,但不会因为它启动失败而影响自己的启动结果。
sudo systemctl daemon-reload
sudo systemctl start mashang.service
如果您还想让 mashang.service 在系统启动时自动启动,并且确保它在 nginx.service 之后启动,您可以使用 enable 命令:
sudo systemctl enable mashang.service
这样,当系统启动时,nginx.service 将首先被启动,随后是 mashang.service(如果 nginx.service 启动成功)。