특정 순서로 시작해야 하는 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
. 분명히 내 모든 서비스는 일부 공통 상위 프로세스의 포크였으며 서비스 중 하나를 다시 시작했을 때 실제로는 상위 프로세스를 다시 시작했고 상위 프로세스는 다른 프로세스를 다시 시작했습니다.
누군가 나에게 완전한 설명을 주면 나는 그것을 정답으로 표시할 것입니다.
핵심은 .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