내 서비스가 실행 중인지 확인하고 그렇지 않은 경우 다시 시작하는 크론 작업 스크립트를 작성하려고 합니다. 따라서 이 작업을 수동으로 수행할 필요가 없습니다.
이제 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
그렇죠.합법적으로애플리케이션은 이런 식으로 동작할 것으로 예상할 수 있습니다.