답변:
OnFailure=
섹션 [Unit]
에는 systemd.unit (5)에 설명 된 지시문 이 있습니다 . 다음과 같이 정의됩니다.
이 장치가 "실패"상태에 들어갈 때 활성화되는 하나 이상의 장치를 공백으로 구분 한 목록입니다.
(또한 OnFailureJobMode=
동일한 섹션에 OnFailure = 장치를 활성화하기위한 작업 모드를 설정할 수 있는 지시문이 있습니다.)
/etc/systemd/system
그 이름을 OnFailure=
지시문에 넣습니다 .
ExecStopPost
장치를 시작하는 대신 명령을 직접 실행할 수도 있습니다 .
나는 OnFailure
설정에 만족하지 않아서 계속 찾고 찾았습니다 ExecStopPost
.
다음 실제 예제는 기본 작업이 실패하면 systemd가 git
명령 을 실행합니다 .
[Unit]
Description=SRI Dispenser Server
ConditionPathExists=|/usr/bin/
After=sri-boot-dsp.service
[Service]
WorkingDirectory=/usr/share/sri/configurations/transmitter
User=root
# This is task to run when this service starts
ExecStart=/usr/bin/python -m sri.DispenserServer
# If any of the ExecStart tasks fail, then ExecStopPost will run
ExecStopPost=/bin/git checkout -- .
Restart=always
RestartSec=10
KillSignal=SIGKILL
[Install]
WantedBy=multi-user.target
https://www.freedesktop.org/software/systemd/man/systemd.service.html
ExecStopPost = 서비스가 중지 된 후 실행되는 추가 명령. 여기에는 ExecStop =에 구성된 명령이 사용되었거나 서비스에 ExecStop =이 정의되어 있지 않거나 서비스가 예기치 않게 종료 된 경우가 포함됩니다. 이 인수는 ExecStart =에 대해 설명 된 것과 동일한 체계에 따라 여러 명령 행을 사용합니다. 이 설정의 사용은 선택 사항입니다. 지정자와 환경 변수 대체가 지원됩니다. – ExecStop =과 달리 –이 설정으로 지정된 명령은 서비스가 올바르게 시작되지 않고 다시 종료 될 때 호출됩니다.
서비스가 올바르게 시작되지 않은 경우에도 실행되는 정리 작업에이 설정을 사용하는 것이 좋습니다. 이 설정으로 구성된 명령은 서비스를 반쯤 시작하지 못하고 불완전하게 초기화 된 데이터를 남겨둔 경우에도 작동 할 수 있어야합니다. 이 설정으로 지정된 명령이 실행될 때 서비스 프로세스가 이미 종료되었으므로 해당 프로세스와 통신을 시도해서는 안됩니다.
이 설정으로 구성된 모든 명령은 $ SERVICE_RESULT, $ EXIT_CODE 및 $ EXIT_STATUS 환경 변수에 설정된 기본 프로세스의 종료 코드 및 상태뿐만 아니라 서비스 결과 코드와 함께 호출됩니다 (systemd.exec 참조). 자세한 내용은 (5)를 참조하십시오.