나는 어떻게 떠들썩한 파티 스크립트 또는 유사한로 위를 번역 할 수있는 다음과 같은내 upstart 스크립트가 실행되고 있는지 어떻게 알 수 있습니까? 의사 코드에서
if myService is running
restart myService
else
start myService
같은 것을 할 노력하고있어?
나는 어떻게 떠들썩한 파티 스크립트 또는 유사한로 위를 번역 할 수있는 다음과 같은내 upstart 스크립트가 실행되고 있는지 어떻게 알 수 있습니까? 의사 코드에서
if myService is running
restart myService
else
start myService
같은 것을 할 노력하고있어?
표준 방법이다 PID 파일을 사용하여 서비스의 PID를 저장하십시오. 그런 다음 PID 파일에 저장된 PID를 사용하여 서비스가 이미 실행 중인지 확인할 수 있습니다.
/etc/init.d
디렉토리에있는 다양한 스크립트를 살펴보고 PID 파일을 사용하는 방법을 살펴보십시오. 또한 대부분의 Linux 시스템에서 /var/run
아래를보고 PID 파일이 저장된 위치를 확인하십시오.
당신은 모든 Bourne 쉘 타입 쉘이 작업을 처리하는 일반적인 방법입니다 같은 것을 수행 할 수 있습니다
# Does the PID file exist?
if [ -f "$PID_FILE" ]
then
# PID File does exist. Is that process still running?
if ps -p `cat $PID_FILE` > /dev/null 2&1
then
# Process is running. Do a restart
/etc/init.d/myService restart
cat $! > $PID_FILE
else
# Process isn't' running. Do a start
/etc/init.d/myService start
cat $! > $PID_FILE
else
# No PID file to begin with, do a restart
/etc/init.d/myService restart
cat $! > $PID_FILE
fi
그러나 리눅스에, 당신은 pgrep을 활용할 수 있습니다
if pgrep myService > /dev/null 2>&1
then
restart service
else
start service
fi
을
어떻게 중괄호를 사용하지 않는지 유의하십시오. if
문은 pgrep
명령의 종료 상태에서 작동합니다. 나는 인쇄하고 싶지 않기 때문에 STDOUT과 STDERR을/dev/null로 출력하고있다. 난 그냥 pgrep
명령의 종료 상태를 원한다.
꽤 몇 가지 옵션이 있습니다
pgrep와에 MANPAGE를 읽어주십시오. 예를 들어 의도하지 않은 일치를 막으려면 -x
을 사용하거나 -f
을 사용하여 서비스를 시작하는 데 사용되는 전체 명령 줄과 일치시켜야 할 수 있습니다.
당신이 추신 보조을 실행할 때 이는 myService, 당신은 단순히 bash는이 작업을 수행 할 수있는 표시되는 경우 (jordanm 제안으로, pgrep을를 사용하는 편집) :
if [ $(pgrep myService) ]; then
restart myService;
else
start myService;
fi
[]와 $()는 필요하지 않습니다. 'pgrep'도 더 적합합니다. – jordanm
감사합니다. pgrep을 사용하도록 수정했습니다. $() 만 제거 할 수 없었습니다. –
'if pgrep myService>/dev/null; 그때. 'if'는 명령의 종료 상태를 테스트합니다. '['는'test'의 별칭입니다. 이것은 if 문법의 일부가 아니라 명령입니다. – jordanm