Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Bash-对多个类似的服务使用1个停止脚本,并仅终止正确的进程_Linux_Bash_Service - Fatal编程技术网

Linux Bash-对多个类似的服务使用1个停止脚本,并仅终止正确的进程

Linux Bash-对多个类似的服务使用1个停止脚本,并仅终止正确的进程,linux,bash,service,Linux,Bash,Service,我在一台机器上有多个进程作为服务运行 在从一个进程/服务转移到多个进程/服务之前,我使用以下脚本停止我的服务 #!/bin/sh SIGNAL=${SIGNAL:-TERM} PIDS=$(ps ax | grep -i 'datastream' | grep java | grep -v grep | awk '{print $1}') if [ -z "$PIDS" ]; then echo "No Brooklin server to stop"

我在一台机器上有多个进程作为服务运行 在从一个进程/服务转移到多个进程/服务之前,我使用以下脚本停止我的服务

#!/bin/sh
SIGNAL=${SIGNAL:-TERM}
PIDS=$(ps ax | grep -i 'datastream' | grep java | grep -v grep | awk '{print $1}')

if [ -z "$PIDS" ]; then
  echo "No Brooklin server to stop"
  exit 1
else
  kill -s $SIGNAL $PIDS
fi
现在的问题是,如果将此脚本作为服务停止命令调用,则会终止此类型的所有进程

我的服务被调用,例如service-A、service-B、service-C。如果我发送
service service-C stop
命令,当前脚本将停止所有3个进程

我想让脚本使用提供的服务名称来确定要停止哪个进程(我可以将A/B/C从进程输出grep到ps,但我没有告诉它如何仅停止
service stop
命令中给出的进程


有人有处理类似问题的经验吗?

在启动应用程序时,您可以尝试以下方法,将您的
PID
存储在静态文件中,然后您可以使用相同的文件终止进程

粘贴在我的一个开始-停止脚本下面,我过去曾使用该脚本搅动多个进程

开始脚本:-

#!/bin/bash
export PORT=$1
. /application/setEnv.sh
/java/jdk1.8.0_152/bin/java -Xms512m -Xmx2G -XX:+DisableExplicitGC -jar /application/api-1.0-0-all.jar </dev/null >>$LOGDIR/service$PORT.log 2>&1 &

echo $! > /application/service$PORT.pid

disown $!
#!/bin/bash
PORT=$1
PID=`cat /application/service$PORT.pid`

if [ ! -z "$PID" ]; then
        rm /application/service$PORT.pid
        kill -9 $PID >/dev/null 2>&1
        if [ $? -gt 0 ]; then
          echo "PID file found but no matching process was found. Stop aborted."
          exit 1
        fi
      else
        echo "PID file is empty and has been ignored."
fi

mv /application/logs/service$PORT.log /application/logs/service$PORT.log`date +%d%m%Y%H%M%S`
我能想到的唯一变化是将我的端口使用逻辑(即,
$port
)替换为您的服务名称(即A/B/C)。

试试看