#!/bin/bash
AppName=zhaopu.jar
#JVM参数
JVM_OPTS=" -Dspring.profiles.active=dev -Djasypt.encryptor.password=microservice -Djasypt.encryptor.password=microservice -Dname=$AppName -Dspring.profiles.active=dev -Duser.timezone=Asia/Shanghai -Xms2048M -Xmx2048M -XX:PermSize=2048M -XX:MaxPermSize=2048M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"
APP_HOME=`pwd`
LOG_PATH=$APP_HOME/logs/$AppName.log
if [ "$1" = "" ];
then
echo -e "\033[0;31m 未输入操作名 \033[0m \033[0;34m {start|stop|restart|status} \033[0m"
exit 1
fi
if [ "$AppName" = "" ];
then
echo -e "\033[0;31m 未输入应用名 \033[0m"
exit 1
fi
function test()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
java -jar $JVM_OPTS $AppName
fi
}
function start()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
if [ x"$PID" != x"" ]; then
echo "$AppName is running..."
else
nohup java -jar $JVM_OPTS $AppName > /dev/null 2>&1 &
echo "Start $AppName success..."
fi
}
function stop()
{
echo "Stop $AppName"
PID=""
query(){
PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
}
query
if [ x"$PID" != x"" ]; then
kill -TERM $PID
echo "$AppName (pid:$PID) exiting..."
while [ x"$PID" != x"" ]
do
sleep 1
query
done
echo "$AppName exited."
else
echo "$AppName already stopped."
fi
}
function restart()
{
stop
sleep 2
start
}
function status()
{
PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
if [ $PID != 0 ];then
echo "$AppName is running..."
else
echo "$AppName is not running..."
fi
}
case $1 in
test)
test;;
start)
start;;
stop)
stop;;
restart)
restart;;
status)
status;;
*)
esac
1.`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
(1)grep -v grep: grep -v 排除信息 即排除 包含grep 的进程
grep本身也是个进程
(2)awk '{print $2}': awk 读取文本指令 即 读取第二列
总体: 根据应用名称 来获取 服务运行的进程号
2
[x"$PID" != x""] : [] 是test命令的简写
x:是为了 防止某些bash脚本编译错误 (字符串空的错) 可以忽略不看他
在 $PID为空时会在某些bash版本中出现编译错误所以运用了shell中的字符抵消原则。
https://blog.csdn.net/qq_32907195/article/details/109308093
3
kill -9 :强制直接杀
kill -15 或 kill -TERM: 这是默认的
程序立刻停止
当程序释放相应资源后再停止
程序可能仍然继续运行
大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后在停止。但是也有程序可以在接受到信号量后,做一些其他的事情,并且这些事情是可以
配置的。如果程序正在等待IO,可能就不会立马做出相应。
也就是说,SIGTERM多半是会被阻塞的、忽略。
https://www.cnblogs.com/liuhouhou/p/5400540.html
网友评论