systemd 서비스는 시스템이 곧 종료될 것임을 어떻게 감지합니까?

systemd 서비스는 시스템이 곧 종료될 것임을 어떻게 감지합니까?

일부 하드웨어를 제어하는 ​​시스템 서비스가 있습니다. 조명을 예로 들어 보겠습니다. 잠시 동안 조명을 켜두는 것이 안전하므로 서비스를 다시 시작하거나 컴퓨터를 다시 시작하면 문제가 해결됩니다.

그러나 시스템이 중지(전원 꺼짐)되는 경우에만 일반적인 정리 작업을 수행할 뿐만 아니라 조명도 끕니다. 즉, 약간 다른 방식으로 서비스를 중지합니다.

ExecStop 명령은 언급된 모든 상황(서비스 재시작, 재시작, 중지)에서 동일한 방식으로 실행됩니다. 이러한 상황을 어떻게 구별하거나 systemd의 전원이 꺼졌는지 알 수 있습니까?

답변1

출력을 검사하여 시스템 상태를 확인할 수 있다는 것이 밝혀졌습니다.

systemctl is-system-running      # See man 1 systemctl for more info

귀하의 경우 조명을 끄는 부분을 다음과 같이 포장하는 것이 좋습니다.

if [[ "$(systemctl is-system-running || true)" == "stopping" ]]; then
    # RUN THE COMMANDS OR EXECUTABLES FOR TURNING OFF THE LAMP HERE
fi

물론, 별도의 래퍼(예: )를 유지하고 싶지 않다면 ExecStop=sh -c 'if ... fi언제든지 ExecStop에서 직접 인라인을 확인할 수 있습니다.

답변2

이것답변파워 타겟 사용 방법 설명

다음과 같이 전원 끄기 이벤트 시 명령을 실행하는 서비스를 추가할 수 있습니다.

[Unit]
Description=My command on power event
Before=shutdown.target
DefaultDependencies=no

[Service]
ExecStart=/some/thing/to/execute
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=shutdown.target

관련 정보