2016-06-30 4 views
5

status()start()이라는 쉘 스크립트가 있습니다. 코드는 다음과 같습니다 :이 스크립트를 실행할 때 쉘 스크립트가 프로세스가 이미 실행 중인지 확인하고 예인 경우 종료합니다.

#function to check the jmeter processes running 
status(){ 
    PID=$(ps -ef | grep jmeter|grep -v grep) 
    echo "The jmeter processes running are: \n$PID" 
} 

#function to run the .jmx file given by the user at run time 
start(){ 
    echo "Please enter the file name .jmx extension" 
    read file 
    echo "Please enter the log file name .jtl extension" 
    read log_file 
    sh /home/ubuntu/apache-jmeter-3.0/bin/jmeter.sh -n -t $file -l $log_file & 
} 
while [ "$1" != "" ]; do 
case "$1" in 
     start) 
      jmeter_start 
      ;; 
     status) 
      jmeter_status 
      ;; 
      *) 
      echo $"Usage: $0 {start|status}" 
      exit 1 
     esac 
    shift 
done 

지금, 나는 이미 실행중인 경우 확인해야하고 실행중인 경우 내가 종료해야합니다. 이 작업을 수행하는 방법을 알려주십시오.

+0

이 검사가 걸리는 곳? 'start' 함수에서? – RowlandB

+0

'start'는 백그라운드에서 실행되지 않습니다. 백그라운드에서 다른 프로세스를 시작한 후 즉시 존재합니다. – chepner

+1

@RowlandB 그게 내가 구현하려고 시도했지만 할 수 없었어요 – sai

답변

4

함수의 시작 부분에 플래그를 추가하고 함수의 끝이 0으로 설정되기 전에 1로 설정하여 원하는대로 쿼리합니다.

#function to check the jmeter processes running 
status(){ 
    PID=$(ps -ef | grep jmeter|grep -v grep) 
    echo "The jmeter processes running are: \n$PID" 
} 

#function to run the .jmx file given by the user at run time 
start(){ 
    export start_flag=1 
    echo "Please enter the file name .jmx extension" 
    read file 
    echo "Please enter the log file name .jtl extension" 
    read log_file 
    sh /home/ubuntu/apache-jmeter-3.0/bin/jmeter.sh -n -t $file -l $log_file & 
    export start_flag=0 
} 

또 다른 옵션은 외부 파일에 쓰고 쿼리하는 것입니다.

+0

나는 이것을 이해하지 못했다. – sai

+0

'$ start_flag'를 사용하거나 작성한 파일에서'cat'을 사용하여 읽으십시오. – Yaron

1

실제로 대부분 이미 사용하고 있습니다. status의 코드를 사용하여 PID를 가져 와서 PID가 있는지 확인할 수 있어야합니다. 그럴 경우 오류를 출력하고 종료하십시오. 그렇지 않으면 이미 가지고있는 일을하십시오.

start(){ 
    PID=$(ps -ef | grep jmeter|grep -v grep) 

    if [ -z $PID ]; then 
     echo "Error: JMeter already running" 
     exit 
    fi 

    echo "Please enter the file name .jmx extension" 
    read file 
    echo "Please enter the log file name .jtl extension" 
    read log_file 
    sh /home/ubuntu/apache-jmeter-3.0/bin/jmeter.sh -n -t $file -l $log_file & 

}

+0

하지만 특정'start()'메소드에 대해 확인하고 싶습니다. 나는 그 질문을 갱신했다. – sai

+0

두 개의 '시작'기능을 구분하는 점은 무엇입니까? 백그라운드에서 실행중인'jmeter'의 두 인스턴스로 끝나지 않는 한,'start '의 두 번 호출이 동시에 실행되는 것이 중요하지 않습니다. – chepner

+0

@chepner yeah. 하지만 동시에 2'start()'를 실행하고 싶지 않습니다. – sai