다른 시스템 장치로 인해 중지되었습니다. 일을 시작하다

다른 시스템 장치로 인해 중지되었습니다. 일을 시작하다

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.servicetomcat.service

mysql.serviceis 일 때 정말로 멈추고 싶다면 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.servicesystemctl 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.servicea mysql.service를 설정합니다.PartOf=webservices.target

활성화 대상 장치를 사용하면 systemctl enable webservices.targetsystemctl start webservices.target서비스 모두 또는 을 사용하여 함께 시작하고 중지할 수 있습니다 systemctl stop webservices.target.

관련 정보