일반적으로 서로 관련이 없는 두 가지 서비스인 JBoss와 WebSphereMQ가 있습니다.
이제 JBoss에 배포된 애플리케이션에는 WebSphereMQ가 필요하므로 JBoss가 WebSphereMQ 다음에 시작되도록 구성하려고 합니다.
스크립트/서비스 파일은 패키지 관리자에서 제공되므로 편집을 피하고 싶습니다.
Systemd는 / 디렉토리 내의 서비스에 대한 로컬 구성 및 심볼릭 링크 사용을 허용 Wants
하지만 문서에 따르면 순서를 적용하지 않으며 동일하게 적용된다고 생각합니다(이 시점에 대한 문서는 명확하지 않습니다). 구성을 위한 심볼릭 링크 및.Requires
${service}.wants
${service}.requires
Requires
Wants
After
Before
rpm 설치 파일을 편집하지 않고 어떻게 이 관계를 명확하게 정의할 수 있습니까?
답변1
귀하의 질문에는 (a) 서비스 종속성을 시스템 단위 파일 구문으로 변환하는 방법, (b) 소프트웨어 공급업체에서 제공하는 단위 파일을 변경하지 않고 단위 정의를 변경하는 방법이라는 두 가지 별도의 문제가 있습니다.
(a)의 경우 키워드가 필요하다는 점을 올바르게 지적하셨습니다 After=
. JBoss 유닛 파일에는 다음이 포함되어야 합니다.둘 다 After=<WebSphereMQ unit name>
그리고 Wants=<WebSphereMQ unit name>
. 그 이유는 유닛 간의 기능적 종속성과 유닛이 시작되는 순서가 별도의 변수/차원이기 때문입니다. 때로는 서비스 B가 시작될 때마다 서비스 A가 시작되기를 원하는 경우가 Wants=
있습니다 Requires=
. 때로는 서비스 B가 이미 대기열에 있는 경우 서비스 B 이후에 서비스 A가 시작되기를 원할 수도 After=
있습니다 Before=
. 일반적으로 둘 다 원합니다.
(b)의 경우 "드롭인"이라는 기능을 사용해야 합니다. 처음부터 systemd에서 사용할 수 있었지만 문서는 많은 매뉴얼 페이지에 흩어져 있어 찾기가 어렵습니다. 마지막 부분에 자세한 설명이 추가되었을 때 최신 버전(내 생각에는 219) 중 하나에서 변경되었습니다.남자 시스템 유닛.
드롭인은 기존 장치 정의의 일부를 덮어쓰는 작은 구성 비트입니다. 이들의 목표는 시스템 관리자가 소프트웨어 공급업체에서 제공한 단위 파일을 덮어쓰지 않고도 로컬 변경을 수행할 수 있도록 하는 것입니다(패키지 관리자가 변경 사항을 덮어쓰는 것에 대해 걱정할 필요가 없으므로 소프트웨어 업데이트가 더 쉬워집니다).
드롭인은 이름이 및 로 끝나는 텍스트 파일로 , 디렉토리 .conf
에 위치합니다 .<unit name>.d
귀하의 경우에는 디렉터리를 생성하고 (JBoss에 유닛 파일이 /etc/systemd/system/jboss.service.d/
제공된다고 가정 ) 다음 내용이 포함된 파일을 생성하려고 합니다.jboss.service
webspheremq.conf
[Unit]
Wants=WebSphereMQ
After=WebSphereMQ
systemd 구성( )을 다시 로드한 후 및 에서 변경 사항을 systemctl daemon-reload
확인해야 합니다 . 두 번째 명령에서 예상되는 내용은 다음과 같습니다("Drop-In" 줄 참고).systemctl show jboss.service
systemctl status jboss.service
● [email protected] - rsnapshot monthly backup
Loaded: loaded (/etc/systemd/system/[email protected]; static)
Drop-In: /etc/systemd/system/[email protected]
└─after.conf
Active: inactive (dead)