Systemd는 .service 파일을 처리할 때 ExecStartPre 및 ExecStartPost 절에서 스크립트를 실행할 수 있습니다. 이 스크립트는 systemd에 값을 반환할 수 있습니다.
systemd의 문서에는 절 앞에 "-"가 붙지 않는 한 0 이외의 모든 반환 값은 실패로 간주되며, 이 경우 서비스 시작 시도가 중단됩니다.
서비스가 단순으로 표시되지 않는 한 systemd는 서비스 시작을 다시 시도하기 때문에 중단된 시작 시도는 큰 문제가 아닙니다.
내가 상속한 스크립트에서 작성자는 반환 값 111이 systemd에 부팅을 중단할 뿐만 아니라 더 이상 부팅을 시도하지 않아야 함을 알린다고 말합니다. 다른 곳에서는 스크립트가 보다 일반적인 0 외에 조건부로 10 또는 11을 반환합니다. 이러한 반환 조건은 스크립트 기능의 필수적인 부분인 것으로 보입니다.
이러한 반환 코드에 대한 systemd의 해석을 설명하는 정보를 찾을 수 없습니다.
답변1
주요 ExecStart
명령을 선택할 수 있습니다. 모르겠지만 의심 하고 사용 -Post
하지 마십시오 .-Pre
10과 11을 유효한 것으로 받아들입니다.성공적인 종료 상태 =
111을 완전한 거래 차단기로 간주하십시오.차단 종료 상태 다시 시작 =
그렇지 않으면 언제든지 빠른 래퍼 셸 스크립트를 작성하여 완화할 수 있습니다.부족systemd에서 지원됩니다.
나는 다음과 같이 할 것입니다 :
#!/bin/sh
if [ -f /run/my-script-is-dead ]
then
# to avoid very fast loop, sleep for a bit
sleep 10
exit 1
fi
# Run the script itself
/path/and/usual-command
# check result
RESULT=$?
if [ $RESULT -eq 10 ] || [ RESULT -eq 11 ]
then
exit 0
fi
if [ $RESULT -eq 111 ]
then
touch /run/my-script-is-dead
exit 1
fi
exit $RESULT
하지만 아래 파일을 넣으면 /run
자동으로사라지다재부팅할 때마다. 좀 더 영구적인 것을 원한다면 다른 곳에 파일을 만들어야 합니다(예: /var/cache/...
).