CentOS7 서버에는 Tomcat 웹 서버와 MySQL DB 서버로 구성된 애플리케이션 스택이 있으며 둘 다 동일한 가상 머신에 설치되어 있습니다. 다음 순서로 함께 시작하고 중지하기를 원합니다.
시작: MySQL-->Tomcat 중지: Tomcat-->MySQL
systemd 단위 문서를 읽고 Requires=
지시문을 사용하여 시작할 수 있었지만 systemctl stop tomcat.service를 사용하여 tomcat을 중지하면 MySQL이 계속 실행됩니다. 시스템 로그를 보면 MySQL을 중지하려는 시도조차 하지 않았으므로 systemd 장치에 문제가 있는 것으로 나타났습니다.
이것은 내 단위입니다:
# Tomcat의 시스템 단위 파일 [단위] Description=Apache Tomcat 웹 응용 프로그램 컨테이너 이후=syslog.target network.target mysql.service 요구=mysql.service [제공하다] 유형=포크 환경=JAVA_HOME=/opt/jdk 환경=CATALINA_PID=/opt/tomcat/temp/tomcat.pid 환경=CATALINA_HOME=/opt/tomcat 환경=CATALINA_BASE=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/bin/kill -15 $MAINPID 사용자=톰캣 그룹=톰캣 [설치하다] WantedBy=다중 사용자.대상
답변1
여기에 표시되는 것은 예상되는 시스템 동작입니다. 종속성은 시작할 때마다 시작 Requires=
되도록 보장 하지만 일단 시작된 후에는 두 장치가 모두 독립적이며 다른 장치가 중지될 때 한 장치가 중지되지 않습니다.mysql.service
tomcat.service
mysql.service
is 일 때 정말로 멈추고 싶다면 tomcat.service
다음을 사용할 수 있습니다.PartOf=
지시하다중지했다가 다시 시작할 때 셀을 연결합니다.
설명하는 예( mysql.service
정지할 때마다 중지 tomcat.service
)의 경우 필요한 것은 PartOf=tomcat.service
의 정의 에 추가하는 것입니다 mysql.service
. 일반적으로 가장 좋은 방법은 오버레이 파일을 사용하는 것입니다. 이 파일을 사용하여 systemctl edit mysql.service
빈 파일이 포함된 텍스트 편집기를 열면 다음 코드 조각을 추가할 수 있습니다.
[Unit]
PartOf=tomcat.service
이는 검사에 사용할 수 있는 /etc/systemd/system/mysql.service.d/override.conf
파일의 일부가 되는 파일에 저장됩니다 .mysql.service
systemctl cat mysql.service
이러한 변경 후에는 systemctl daemon-reload
... 예상대로 작동할 것입니다...
순서와 관련하여 서비스를 중지할 때 종속성은 역순으로 존중되므로 모든 것이 After=mysql.service
예상대로 작동 해야 합니다. tomcat.service
(즉, 이 경우 tomcat.service
먼저 중지한 다음 중지합니다 mysql.service
.)
이런 식으로 유닛을 중지하는 것이 항상 좋은 생각은 아닐 수도 있습니다. 어쩌면 별도의 유닛을 만드는 것이 더 나은 접근 방식일 수도 있습니다..target
단위제어하려는 모든 서비스를 그룹화하세요. 어쩌면 비슷한 것일 수도 있습니다 webservices.target
.
다음 콘텐츠로 이 유닛을 생성합니다.
[Unit]
Description=Web Services
Requires=tomcat.service mysql.service
After=tomcat.target mysql.service
[Install]
WantedBy=multi-user.target
그런 다음 위에서 설명한 재정의 메커니즘을 사용하여 두 가지를 모두 갖고 tomcat.service
a mysql.service
를 설정합니다.PartOf=webservices.target
활성화 대상 장치를 사용하면 systemctl enable webservices.target
두 systemctl start webservices.target
서비스 모두 또는 을 사용하여 함께 시작하고 중지할 수 있습니다 systemctl stop webservices.target
.