systemd "After="는 서비스를 시작하기 전에 내부 서비스가 실패 없이 시작되는지 확인합니까?

systemd "After="는 서비스를 시작하기 전에 내부 서비스가 실패 없이 시작되는지 확인합니까?

예:

bar.service:

[Unit]
After=foo.service

foo.service가 올바르게 시작되지 않으면 bar.service가 시작됩니까? foo.service가 어떤 것에도 의존하지 않고 시작되지 않으면 어떻게 되나요?

답변1

After=x이것을 다음과 같은 의미로 생각 해야 합니다 .

  • 이 작업은 작업 "x"가 완료된 후에 시작됩니다.
  • 이는 작업 "x" 실행 결과에 대해 아무 것도 나타내지 않으며 작업 "x"가 실행될 때까지 이 작업을 기다리는 것을 나타냅니다.

~에서man systemd.unit:

가장 중요한 점은 서비스 단위의 경우 Before=구성된 After=모든 시작 명령이 호출되고 해당 명령이 실패하거나 성공적인 시작을 보고하면 시작이 완료된 것으로 간주된다는 것입니다. 여기에는 ExecStartPost=(또는 ExecStopPost=종료의 경우) 포함됩니다.

Requires=이러한 설정은 , Wants=또는 의 Requisite=구성된 요구 사항 종속성 과 독립적이며 직교합니다 BindsTo=. After=및 options 에 장치 이름을 포함하는 것이 일반적인 패턴입니다 Wants=. 이 경우 나열된 장치는 이러한 옵션으로 구성된 장치보다 먼저 시작됩니다.

따라서 이는 다음을 의미합니다.

  1. bar.servicefoo.service실패한 상태로 종료 되더라도 시작됩니다.
  2. foo.service활성화된 적이 없다면 다른 장치에 의해 활성화될 bar.service때까지 기다립니다 .foo.service
  3. bar.service충족되지 않은 종속성으로 인해 실패한 상태가 될 가능성이 매우 높습니다.
    대기 시간은 다른 설정(예: )에 의해 제어 됩니다 JobTimeoutSec=. JobRunningTimeoutSec=(바라보다:시스템 서비스 시간 초과 값을 변경하는 방법은 무엇입니까?) 이 사건을 잡는
    데 사용할 수 있습니다 JobTimeoutAction=.
  • 편집하다:(2)와 (3)은 에만 적용되므로 더 이상 사용되지 않습니다 Requisite=foo.service. @TooTea를 수정해 주셔서 감사합니다.

관련 정보