run.sh实践
前言
我又回来了,今天先来个实用的脚本。
之前发过在linux上部署jar的相关细节,美中不足的是里面的脚本写的太简单,也不够智能,每次需要先kill,再start.现在奉上一个高级版本的启动脚本。
run.sh如下:
#!/bin/bash
# chkconfig: 2345 90 10
# description: service control script
# config
DIR=/opt/deploy/bus/bus_info
JAVA_HOME=/usr/local/java/jdk/jdk1.8.0_131
JRE_HOME=/usr/local/java/jdk/jdk1.8.0_131/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
DATE=$(date +%Y%m%d)
if [ ! -d $DIR/logs ];then
mkdir -p $DIR/logs
fi
if [ ! -d $DIR/updateJarFile ];then
mkdir -p $DIR/updateJarFile
fi
if [ ! -d $DIR/backup ];then
mkdir -p $DIR/backup
fi
JARS=$(echo $DIR |awk -F'/' '{print $NF}')
JARFILE=$(ls ${DIR} |grep .jar$)
JARUPDATEFILE=$(ls ${DIR}/updateJarFile/ |grep .jar$)
JARUPDATEFILENUM=$(ls ${DIR}/updateJarFile/ |grep .jar$|wc -l)
PROFILE=dev
OUTFILE=out.log.${DATE}
PIDFILE=${DIR}/${JARS}.pid
LOGPATH=$DIR/logs
cd $DIR
start(){
if [ ${JARUPDATEFILENUM} -eq 1 ]; then
mv ${JARFILE} backup/
mv updateJarFile/${JARUPDATEFILE} .
JARFILE=${JARUPDATEFILE}
fi
# config
# -Dspring.profiles.active=$PROFILE
java -jar $DIR/$JARFILE > $LOGPATH/$OUTFILE 2>&1 /dev/null &
new_pid=$!
echo "$new_pid" > $PIDFILE
}
stop(){
if [ -f $PIDFILE ]; then
JPID=$(cat ${PIDFILE})
if [ "$JPID" != "" ];then
kill -9 $JPID
rm -rf $PIDFILE
fi
fi
}
CheckProcessStatus(){
CPS_PID=$1
if [ "$CPS_PID" != "" ] ;then
CPS_PIDLIST=`ps -ef|grep $CPS_PID|grep -v grep|awk -F" " '{print $2}'`
else
CPS_PIDLIST=`ps -ef|grep "$JARFILE"|grep -v grep|awk -F" " '{print $2}'`
fi
for CPS_i in `echo $CPS_PIDLIST`
do
if [ "$CPS_PID" = "" ] ;then
CPS_i1="$CPS_PID"
else
CPS_i1="$CPS_i"
fi
if [ "$CPS_i1" = "$CPS_PID" ] ;then
kill -0 $CPS_i >/dev/null 2>&1
if [ $? != 0 ] ;then
echo "[`date`] JAVA $JARS: Process $i have Dead" kill -9 $CPS_i >/dev/null 2>&1
return 1
else
return 0
fi
fi
done
echo "[`date`] JAVA $JARS: Process $CPS_i is not exists"
return 1
}
status(){
SPID=$(cat $PIDFILE)
CheckProcessStatus $SPID >/dev/null
if [ $? != 0 ];then
echo "Java Process:{$SPID} Stopped ...."
else
echo "Java Process:{$SPID} Running Normal."
fi
}
restart(){
echo -e "Java stopping......."
stop
echo -e "Java starting......."
start
}
case $1 in
start)
start
;;
stop)
stop
;;
restart | reload)
restart
;;
status)
status
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|status}"
RETVAL=1
esac
exit $RETVAL
1.设置jdk所在位置
2.设置jar所在位置
3.自定义输出日志的前缀
如果需要将启动做成服务快捷操作可以执行以下(可选):
1、chmod +x run.sh
2、cp -a run.sh /etc/init.d/systemmanager
3、chkconfig --add systemmanager
4、chkconfig systemmanager on
5、systemctl start systemmanger
注:systemmanager是脚本名称,按需修改,最好按照业务进行修改,
如果设置失败需要删除 1.cd /etc/init.d/ 2. rm systemmanger即可。
具体使用:
1.第一次使用./run.sh start即可。
2.后续更新将jar放到updatefile目录就可以了
总结
重复的工作能智能化,简单化提高的不仅是效率,还有工作的愉悦,集中精力放在提高效率上,而不是被琐事打扰。