#!/bin/bash
AppName=zhaopu.jar
#JVM參數(shù)
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 未輸入應(yīng)用名 \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 的進(jìn)程
grep本身也是個進(jìn)程
(2)awk '{print $2}': awk 讀取文本指令? ? 即 讀取第二列? ??
總體: 根據(jù)應(yīng)用名稱 來獲取 服務(wù)運(yùn)行的進(jìn)程號
2
[x"$PID" != x""] : []? 是test命令的簡寫
x:是為了 防止某些bash腳本編譯錯誤 (字符串空的錯) 可以忽略不看他
在 $PID為空時會在某些bash版本中出現(xiàn)編譯錯誤所以運(yùn)用了shell中的字符抵消原則鸿吆。
https://blog.csdn.net/qq_32907195/article/details/109308093
3
kill -9? ?:強(qiáng)制直接殺
kill -15 或 kill -TERM: 這是默認(rèn)的
程序立刻停止
當(dāng)程序釋放相應(yīng)資源后再停止
程序可能仍然繼續(xù)運(yùn)行
? ? ? 大部分程序接收到SIGTERM信號后诈嘿,會先釋放自己的資源损俭,然后在停止。但是也有程序可以在接受到信號量后惫撰,做一些其他的事情,并且這些事情是可以
? ? ? 配置的放仗。如果程序正在等待IO润绎,可能就不會立馬做出相應(yīng)。
也就是說,SIGTERM多半是會被阻塞的莉撇、忽略呢蛤。
https://www.cnblogs.com/liuhouhou/p/5400540.html