手动启动停止后台服务 1 2 3 4 5 6 7 # 运行一个后台服务 $ nohup jar -jar test.jar >> myout.log & # 当要停止此服务时,先查询pid,再kill 掉 $ ps -ef|grep v680 root 522133 1 0 12:10 pts/0 00:00:20 java -jar test.jar $ kill -9 522133
记录后台服务PID shell脚本中,可以用 $!
获取到当前进程的PID。 则 开始脚本 通过 echo $! > my.pid
将PID写入到一个文件中;停止脚本 从文件中读出PID,执行Kill命令杀掉进程。
启动 1 2 3 4 $ vim start.sh # !/bin/bash nohup jar -jar test.jar >> myout.log & echo $! > my.pid
停止 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $ vim stop.sh # !/bin/bash file="my.pid" if [ ! -f $file ];then echo "the $file is not a file" exit 2 fi { read line1 } <$file echo "kill the $file process $line1" kill -9 $line1 rm $file exit 2
脚本查询PID 除了将PID记录到文件,还可以将【手动启动停止后台服务】做成脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 $ vim stop_service.sh # !/bin/bash name=myservice-name # 获取pid,参考https://blog.csdn.net/zhougubei/article/details/124498193 pid=`ps -ef|grep $name | grep java|awk '{print $2}'` echo "pid: [$pid]" # 判断pid是否为空,参考https://blog.csdn.net/weixin_43810067/article/details/124113759 # if [[ -z $pid ]];then # echo "pid is empty." # exit 2# fi # 判断pid变量中是否含有“missing”字符串 ,参考https://linux265.com/news/3780.html # if [[ "$pid " =~ .*"missing" .* ]];then # echo "pid is missing." # exit 2# fi # 判断pid是否是有效数字 if [ -n "$(echo $pid| sed -n "/^[0-9]\+$/p")" ];then echo "kill the $name process $pid" # -9 强制杀进程, -15 保留一点时间释放资源 kill -15 $pid # 睡眠1秒再查询java进程 sleep 1 ps -ef|grep java else echo "$name not running." fi # TODO 此处可以加入启动服务,就可以变成一个重启服务的脚本啦!
无注释版本,方便拷贝使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 # !/bin/bash name=myservice-name pid=`ps -ef|grep $name | grep java|awk '{print $2}'` echo "pid: [$pid]" if [ -n "$(echo $pid| sed -n "/^[0-9]\+$/p")" ];then echo "kill the $name process $pid" kill -15 $pid sleep 1 ps -ef|grep java else echo "$name not running." fi
注意:#!/bin/bash
比 #!/bin/sh
支持的语法更多,#!/bin/sh
不支持 if [[ ]];then
语法