尝试捕获并使用 BASH 内运行的脚本的响应

尝试捕获并使用 BASH 内运行的脚本的响应

我正在创建一个运行脚本并将其输出到文件的函数。一旦发生这种情况,它就会逐行读取该文件并执行停止。我想添加一个 if 条件,如果服务器无法启动它,则杀死 -9 $pid。它不起作用。

function stop_server() {
     su -s /bin/bash user /usr/local/server/bin/server list | sed "1,2 d" >>jvms
     while IFS="" read -r p || [ -n "$p" ]
     do
         su -s /bin/bash user /usr/local/server/bin/server stop $p
         if [[ $(su -s /bin/bash user /usr/local/server/bin/server stop $p)= 'Server $p stop failed. Check server logs for details.' ]];
         then
               PID="ps -ef|grep -v grep |grep '$p' | awk '{print $2}'"
               kill -9 $PID
         fi
     done
}

我想捕获服务器停止 $p 的结果,然后我想我可以做这样的事情:

      if [ $results = 'Server $p stop failed. Check server logs for details.' ]; then
         PID="ps -ef|grep -v grep |grep '$p' | awk '{print $2}'"
         kill -9 $PID
      fi

答案1

你要

 PID=$(ps -ef|grep -v grep |grep '$p' | awk '{print $2}')

但恕我直言,你应该找到一种方法来通过更直接的方式获取进程的 PID。他们不会在某处留下“.pid”文件吗?您需要su发出停止指令吗?

相关内容