systemd "oneshot" 서비스가 종료를 트리거합니다.

systemd "oneshot" 서비스가 종료를 트리거합니다.

Type=oneshot시스템 정전을 유발한 systemd 서비스를 표시합니다. 예를 들어, 이는 다음과 같은 sigpwr.target문제를 방지하는 데 사용될 수 있습니다 .sigpwr.target작업 모드로 시작replace-irreversible.

완료하기 전에 원샷 서비스가 종료되지 않았는지 확인하세요. 이로 인해 표시 오류가 발생할 수 있습니다.

  1. 서비스가 완료되기 전에 systemd가 서비스를 중지하거나 종료하는 가능한 순서가 있습니까? 만약 있다면 어떤 영향을 미치게 될까요?
  2. 그렇다면 귀하의 서비스도 작동합니까?작업 모드로 시작하시겠습니까 replace-irreversible?

답변1

# trigger-poweroff.service
[Unit]
DefaultDependencies=no
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl --no-block poweroff

DefaultDependencies=no암시적을 피하십시오 Conflicts=shutdown.target. 이는 서비스가 작업 모드에서 시작되는지 여부가 중요하지 않음을 의미합니다 replace-irreversible. Wants=sysinit.target예를 들어 emergency.target.

Before=shutdown.targetsystemd-shutdown이 신호 전송을 시작하기 전에 서비스가 완료되었는지 확인하세요. 다른 것이 없다면, 이는 단위의 정확성 분석을 더 간단하게 만듭니다. 서비스가 정전이 완료될 때까지 기다리지 않도록 하여 교착 상태를 방지합니다.

systemd-shutdownSIGTERM을 사용하여 systemctl 프로세스를 종료해도 상관 없습니다. 프로세스는 단순히 상태 WIFSIGNALWTERMSIG으로 종료됩니다 SIGTERM. Systemd는 이를 깨끗하고 성공적인 종료로 간주합니다. SuccessExitStatus 정의를 참조하세요 man systemd.exec. 그러나 커널이 systemd 이전에 이 초기 종료를 예약하지 못하는 경우 DEFAULT_TIMEOUT_USECsystemd-shutdown은 차단할 수 없는 신호 SIGKILL을 보냅니다. Systemd는 이를 성공적인 종료로 처리하지 않습니다.

관련 정보