![centos 重启服务及其依赖项](https://linux22.com/image/129303/centos%20%E9%87%8D%E5%90%AF%E6%9C%8D%E5%8A%A1%E5%8F%8A%E5%85%B6%E4%BE%9D%E8%B5%96%E9%A1%B9.png)
我已经设置了 4 项必须按特定顺序启动的服务。比方说:
serv1 => serv2 => serv3 |服务4
serv3 或 serv4 的顺序并不重要,只要它们都在 serv2 之后启动即可。
所以我构建了以下服务文件:
serv3.service(serv4.service类似):
[Unit]
Description=Starts serv3
After=network.target serv1.service serv2.service
[Service]
Type=forking
User=root
ExecStart=/usr/bin/services/serv3start.sh
ExecStop=/usr/bin/services/serv3stop.sh
Restart=always
[Install]
WantedBy=multi-user.target
serv2.服务:
[Unit]
Description=Starts serv2
After=network.target serv1.service
[Service]
Type=forking
User=root
ExecStart=/usr/bin/services/serv2start.sh
ExecStop=/usr/bin/services/serv2stop.sh
Restart=always
[Install]
WantedBy=multi-user.target
serv1.服务:
[Unit]
Description=Starts serv1
After=network.target
[Service]
Type=forking
User=root
ExecStart=/usr/bin/services/serv1start.sh
ExecStop=/usr/bin/services/serv1stop.sh
Restart=always
[Install]
WantedBy=multi-user.target
这些.sh
脚本只不过是一行脚本文件,每个脚本启动/停止不同的java程序。
到目前为止,一切都很好。
问题是:当我重新启动 serv3 或 serv4(例如,通过systemctl restart serv3
)时,所有四个服务都会重新启动。
我究竟做错了什么?
答案1
经过2天的苦苦挣扎,最终发现问题出在Type=forking
.显然,我的所有服务都是一些常见父进程的分支,当我重新启动其中一个服务时,我实际上是在重新启动父进程,而父进程又重新启动了其他进程。
如果有人给我完整的解释,我会将其标记为正确答案。
我认为关键是.sh
启动java程序的脚本,它们都像:
#! /bin/sh
java -jar /path_to_java_program/java_program.jar&
现在,由于我的 java 程序有一个嵌入式启动脚本,我只是在做类似的事情(在所有程序中):
[Unit]
Description=Starts java_program
After=network.target and other dependencies
[Service]
Type=simple
User=root
ExecStart=/path_to_the_java_program/java_program.jar
ExecStop=/usr/bin/services/serv1stop.sh
Restart=always
[Install]
WantedBy=multi-user.target