systemd는 ExecStartPre 및 ExecStartPost에서 시작되는 스크립트의 반환 코드를 어떻게 해석합니까?

systemd는 ExecStartPre 및 ExecStartPost에서 시작되는 스크립트의 반환 코드를 어떻게 해석합니까?

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/...).

관련 정보