초기화 스크립트는 실행 시 항상 올바른 종료 코드를 반환합니까?

초기화 스크립트는 실행 시 항상 올바른 종료 코드를 반환합니까?

내 서비스가 실행 중인지 확인하고 그렇지 않은 경우 다시 시작하는 크론 작업 스크립트를 작성하려고 합니다. 따라서 이 작업을 수동으로 수행할 필요가 없습니다.

이제 bash 스크립트에서 서비스 상태를 확인하는 방법을 온라인으로 검색한 결과 기본적으로 몇 가지 변형이 있는 다음을 발견했습니다.

ps auxw | grep <service_name> | grep -v grep

if [[ $? != 0 ]]; then
        /etc/init.d/<service_name> start
fi

나는 몇 가지 생각을 했고 이것이 덜 번거롭고 init 스크립트의 일반 기능을 사용하여 이를 확인하는 방법이 될 것이라고 생각했습니다.

/etc/init.d/<service_name> status

if [[ $? != 0 ]]; then
    /etc/init.d/<service_name> start
fi

내가 틀렸다면 정정하십시오. 하지만 이것이 항상 작동하지 않습니까? 이것이 init 스크립트의 일반적인 속성입니까? 종료 코드를 반환합니까? 미리 감사드립니다. :)

답변1

100%는 아닙니다. 그러나 이는 매우 좋은 조치입니다.

CFEngine 3는 서비스 약속에서 이를 사용하여 서비스가 실행 중인지 확인합니다. 종료 코드 /etc/init.d/<servicename> status가 0이면 서비스가 실행 중인 것으로 간주됩니다.

방금 BitBucket이 이 규칙을 따르지 않는 상황에 직면했습니다. /etc/init.d/atlbitbucket status실행 중이 아닐 때에도 0을 반환합니다. 그러나 이는 init 스크립트의 관례를 따르지 않는 잘못된 동작(버그)이라고 생각됩니다.


이에 대한 참조를 찾았습니다.Linux 표준 기본사양상태:

상태 작업이 요청되면 초기화 스크립트는 다음 종료 상태 코드를 반환합니다.

0         program is running or service is OK
1         program is dead and /var/run pid file exists
2         program is dead and /var/lock lock file exists
3         program is not running
4         program or service status is unknown
5-99      reserved for future LSB use
100-149   reserved for distribution use
150-199   reserved for application use
200-254   reserved

그렇죠.합법적으로애플리케이션은 이런 식으로 동작할 것으로 예상할 수 있습니다.

관련 정보