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스크립트는 한 줄짜리 스크립트 파일에 불과하며, 각 스크립트는 서로 다른 스크립트를 시작/중지합니다.자바 프로그램.

여태까지는 그런대로 잘됐다.

문제는 serv3 또는 serv4를 다시 시작하면(예: 를 통해 systemctl restart serv3) 네 가지 서비스가 모두 다시 시작된다는 것입니다.

내가 뭘 잘못했나요?

답변1

이틀 동안 어려움을 겪은 후 마침내 문제가 무엇인지 알아냈습니다 Type=forking. 분명히 내 모든 서비스는 일부 공통 상위 프로세스의 포크였으며 서비스 중 하나를 다시 시작했을 때 실제로는 상위 프로세스를 다시 시작했고 상위 프로세스는 다른 프로세스를 다시 시작했습니다.

누군가 나에게 완전한 설명을 주면 나는 그것을 정답으로 표시할 것입니다.

핵심은 .shJava 프로그램을 시작하는 스크립트라고 생각합니다. 둘 다 다음과 같습니다.

#! /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

관련 정보