![systemd "oneshot" 서비스가 종료를 트리거합니다.](https://linux55.com/image/10463/systemd%20%22oneshot%22%20%EC%84%9C%EB%B9%84%EC%8A%A4%EA%B0%80%20%EC%A2%85%EB%A3%8C%EB%A5%BC%20%ED%8A%B8%EB%A6%AC%EA%B1%B0%ED%95%A9%EB%8B%88%EB%8B%A4..png)
Type=oneshot
시스템 정전을 유발한 systemd 서비스를 표시합니다. 예를 들어, 이는 다음과 같은 sigpwr.target
문제를 방지하는 데 사용될 수 있습니다 .sigpwr.target
작업 모드로 시작replace-irreversible
.
완료하기 전에 원샷 서비스가 종료되지 않았는지 확인하세요. 이로 인해 표시 오류가 발생할 수 있습니다.
- 서비스가 완료되기 전에 systemd가 서비스를 중지하거나 종료하는 가능한 순서가 있습니까? 만약 있다면 어떤 영향을 미치게 될까요?
- 그렇다면 귀하의 서비스도 작동합니까?예작업 모드로 시작하시겠습니까
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.target
systemd-shutdown이 신호 전송을 시작하기 전에 서비스가 완료되었는지 확인하세요. 다른 것이 없다면, 이는 단위의 정확성 분석을 더 간단하게 만듭니다. 서비스가 정전이 완료될 때까지 기다리지 않도록 하여 교착 상태를 방지합니다.
systemd-shutdown
SIGTERM을 사용하여 systemctl 프로세스를 종료해도 상관 없습니다. 프로세스는 단순히 상태 WIFSIGNAL
및 WTERMSIG
으로 종료됩니다 SIGTERM
. Systemd는 이를 깨끗하고 성공적인 종료로 간주합니다. SuccessExitStatus 정의를 참조하세요 man systemd.exec
. 그러나 커널이 systemd 이전에 이 초기 종료를 예약하지 못하는 경우 DEFAULT_TIMEOUT_USEC
systemd-shutdown은 차단할 수 없는 신호 SIGKILL을 보냅니다. Systemd는 이를 성공적인 종료로 처리하지 않습니다.