2016-06-30 13 views
5

Ich habe ein Shell-Skript mit Methoden status() und start(). Der Code ist unten:Shell-Skript, um zu überprüfen, ob der Prozess bereits ausgeführt wird und beenden, wenn ja

#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 

jetzt, wenn ich dieses Skript ausführen, muss ich überprüfen, ob es bereits ausgeführt wird und wenn es läuft Ich habe zu verlassen. Lass mich wissen, wie das geht.

+0

Wo wird diese Überprüfung stattfindet? In der Startfunktion? – RowlandB

+0

'Start' läuft nicht im Hintergrund; Es startet einen anderen Prozess im Hintergrund und existiert sofort. – chepner

+1

@RowlandB Das habe ich versucht zu implementieren, aber konnte es nicht tun – sai

Antwort

4

Fügen Sie ein Flag am Anfang der Funktion hinzu und setzen Sie es auf 1, bevor das Ende der Funktion auf 0 gesetzt wird, fragen Sie es ab, wie Sie möchten.

#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 
} 

Eine andere Möglichkeit wäre, in eine externe Datei zu schreiben und sie abzufragen.

+0

Ich habe das nicht verstanden. Kannst du erklären, was du meinst, indem du es abfragst – sai

+0

Benutze '$ start_flag' oder lies aus der Datei, mit der du' cat' geschrieben hast. – Yaron

1

Sie haben tatsächlich das meiste schon. Sie sollten in der Lage sein, den Code von status zu verwenden, der die PID erhält und nur prüft, ob sie existiert. Wenn dies der Fall ist, einen Fehler ausgeben und beenden. Ansonsten tu, was du schon hast.

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

aber ich möchte es für diese bestimmte 'start()' Methode überprüfen. Ich habe die Frage aktualisiert. Bitte überprüfen Sie – sai

+0

Was unterscheidet zwei "Start" -Funktionen? Es spielt keine Rolle, ob zwei Aufrufe von 'start' gleichzeitig ausgeführt werden, solange Sie nicht mit zwei Instanzen von' jmeter' im Hintergrund laufen. – chepner

+0

@chepner ja. aber ich möchte nicht 2 'start()' gleichzeitig ausführen – sai