systemd는 서비스가 비활성화된 후에 주문된 서비스를 시작합니다.

systemd는 서비스가 비활성화된 후에 주문된 서비스를 시작합니다.

서비스 B 장치 구성(일회성 서비스):

[Unit]
Description=Service B
After=serviceA.service

서비스 A는 기본적으로 비활성화되어 있습니다. (간단한 서비스입니다.)

● serviceA.service - service A
Loaded: loaded (/usr/lib/systemd/system/serviceA.service; disabled; vendor preset: disabled)
Active: inactive (dead)

주문 요구 사항으로 인해 서비스 A가 시작될 때까지 서비스 B가 시작되지 않도록 하고 싶습니다. 제가 관찰한 바에 따르면 머신이 부팅되면 서비스 A를 기다리지 않고 서비스 B가 시작됩니다. 누구든지 이것을 설명할 수 있나요?

답변1

시작(및 실행 중)할 때만 시작하려면 serviceB.service에 다음을 추가해야 합니다.serviceA.serviceRequisiteserviceB.service

에서 man systemd.unit:

전제조건=

Requires=와 유사합니다. 그러나 여기에 나열된 장치가 아직 시작되지 않은 경우에는 시작되지 않으며 장치 시작이 즉시 실패합니다. Requisite=은 두 장치가 동일한 트랜잭션에서 시작된 경우에도 순서 종속성을 의미하지 않습니다. 따라서 이 설정은 일반적으로 이 장치가 다른 장치보다 먼저 시작되지 않도록 After=와 함께 사용해야 합니다.

서비스B.서비스

[Unit]
Description=Service B
After=serviceA.service
Requisite=serviceA.service

[Service]
Type=oneshot
ExecStart=/bin/bash /home/user/somescript.sh

[Install]
WantedBy=multi-user.target

예를 들어, 활성화하지 않았 serviceA.service거나 원할 때 실행되지 않은 경우 serviceB.service로그에 다음과 같은 메시지가 표시됩니다 serviceB.service.

A dependency job for serviceB.service failed. See 'journalctl -xe' for details.

관련 정보