2016-06-30 46 views
5

Ho uno script di shell con i metodi status() e start(). Il codice è qui sotto:Script di shell per verificare se il processo è già in esecuzione e uscita se sì

#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 

ora quando ho eseguito questo script, devo verificare se è già in esecuzione e se è in esecuzione devo uscire. Fammi sapere come fare questo.

+0

casi in cui è questo controllo in atto? Nella funzione 'start'? – RowlandB

+0

'start' non viene eseguito in background; inizia un processo diverso in background quindi esiste immediatamente. – chepner

+1

@RowlandB Questo è quello che stavo cercando di implementare ma non potevo farlo – sai

risposta

4

Aggiungere un flag all'inizio della funzione e impostarlo su 1, prima della fine della funzione impostarlo su 0, interrogarlo come desiderato.

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

Un'altra opzione sarebbe scrivere su un file esterno e interrogarlo.

+0

Non ho capito questo. Puoi spiegare che cosa intendi con la query – sai

+0

O usi '$ start_flag' o leggi dal file che hai scritto usando' cat'. – Yaron

1

In realtà ne avete già la maggior parte. Dovresti essere in grado di utilizzare il codice da status che ottiene il PID e controlla se esiste. Se lo fa, emettere un errore e uscire. Altrimenti, fai quello che hai già.

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

ma voglio verificarlo per quel particolare metodo 'start()'. Ho aggiornato la domanda. Si prega di verificare – sai

+0

Ciò che distingue due funzioni 'start'? Non importa se due invocazioni di 'start' vengono eseguite contemporaneamente, a patto che non si finisca con due istanze di' jmeter' in esecuzione in background. – chepner

+0

@chepner si. ma non voglio eseguire 2 'start()' allo stesso tempo – sai

Problemi correlati