centos 重启服务及其依赖项

centos 重启服务及其依赖项

我已经设置了 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

相关内容