2012-06-03 1 views

답변

5

표준 방법이다 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을 사용하여 서비스를 시작하는 데 사용되는 전체 명령 줄과 일치시켜야 할 수 있습니다.

0

당신이 추신 보조을 실행할 때 이는 myService, 당신은 단순히 bash는이 작업을 수행 할 수있는 표시되는 경우 (jordanm 제안으로, pgrep을를 사용하는 편집) :

if [ $(pgrep myService) ]; then 
    restart myService; 
else 
    start myService; 
fi 
+0

[]와 $()는 필요하지 않습니다. 'pgrep'도 더 적합합니다. – jordanm

+0

감사합니다. pgrep을 사용하도록 수정했습니다. $() 만 제거 할 수 없었습니다. –

+1

'if pgrep myService>/dev/null; 그때. 'if'는 명령의 종료 상태를 테스트합니다. '['는'test'의 별칭입니다. 이것은 if 문법의 일부가 아니라 명령입니다. – jordanm

관련 문제