【问题标题】:Shell script to check if the process is already running and exit if yesShell 脚本检查进程是否已经在运行,如果是则退出
【发布时间】:2016-06-30 14:37:27
【问题描述】:

我有一个带有 status()start() 方法的 shell 脚本。代码如下:

#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

现在当我运行这个脚本时,我必须检查它是否已经在运行,如果它正在运行,我必须退出。让我知道该怎么做。

【问题讨论】:

  • 这项检查在哪里进行?在start 函数中?
  • start 不在后台运行;它在后台启动一个不同的进程,然后立即存在。
  • @RowlandB 这就是我试图实现但做不到的
  • @chepner 是的。我正在运行 jmeter 命令以在后台执行 .jmx 文件。

标签: linux bash shell jmeter scripting-language


【解决方案1】:

在函数的开头添加一个标志并将其设置为1,在函数结束之前将其设置为0,随意查询。

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

另一种选择是写入外部文件并查询它。

【讨论】:

  • 我不明白这一点。你能解释一下你的查询是什么意思吗
  • 要么使用$start_flag,要么使用cat从您写入的文件中读取。
【解决方案2】:

实际上你已经拥有了大部分。您应该能够使用来自status 的代码来获取 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 &

}

【讨论】:

  • 但我想检查它是否有特定的start() 方法。我已经更新了这个问题。请检查
  • 两个start 函数的区别是什么?两个start 的调用是否同时运行并不重要,只要您最后没有在后台运行两个jmeter 实例即可。
  • @chepner 是的。但我不想同时运行 2 个start()
  • @chepner 我已经编辑了问题,请检查并帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 2014-08-21
  • 2017-10-05
  • 2011-02-12
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多