6

I have a shell script with methods status() and start(). The code is below:

#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

now when I run this script, I have to check if it is already running and if it is running I have to exit. Let me know how to do this.

user123
  • 243
  • 4
  • 10

2 Answers2

4

Add a flag at the beginning of the function and set it to 1, before the end of the function set it to 0, query it however you like.

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

Another option would be writing to an external file and query it.

Yaron
  • 1,199
  • 1
  • 15
  • 35
1

You actually have most of it already. You should be able to use the code from status that gets the PID and just check if it exists. If it does, output some error and exit. Otherwise, do what you already have.

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 &

}

RowlandB
  • 563
  • 5
  • 13
  • but I want to check it for that particular `start()` method. I have updated the question. Please check – user123 Jun 30 '16 at 15:06
  • What differentiates two `start` functions? It doesn't really matter if two invocations of `start` run at the same time, as long as you don't wind up with two instances of `jmeter` running in the background. – chepner Jun 30 '16 at 15:24
  • @chepner yeah. but i don't want to run 2 `start()` at the same time – user123 Jun 30 '16 at 15:44
  • @chepner I have edited the question please check and help – user123 Jun 30 '16 at 19:58