例子:
case "$1" in
start)
start
;;
stop)
stop
;;
deploy)
deploy
;;
depstart)
depstart
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart|deploy|depstart}"
exit 2
esac
根据执行脚本后面带的参数,决定运行具体函数
函数写法:
#### 重启
restart() {
stop
sleep 4
start
}
输出到日志
echo "Stopping $APP_NAME ........"
自定义变量,变量引用
flag=1
flag=`expr $flag + 1` (变量自增)
While循环
while [ -f "$logs" ]
do
echo "Starting $APP_NAME ........"
JAR_FILE=`cd $JAR_ZIP_DIR && ls -at $APP_NAME*.jar |head -n 1`
nohup java $JAVA_OPTS -jar $JAR_ZIP_DIR/$JAR_FILE --schedule.blackUser.openFlag=off > "$logs" &
sleep 4
getTradeProtalPID
if [ $tradePortalPID -ne 0 ]; then
echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\) ............." \033[32;49;1m [SUCCESS] \033[39;49;0m"
break;
else
echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\) ............." \033[31;49;1m [Failed] \033[39;49;0m"
flag=`expr $flag + 1`
if [[ "$flag" -gt "$times" ]]
then
echo "limit times ...stop"
break;
fi
fi
done
解释:
- -f “$logs” logs是我自定义的路径日志 ,这句的意思是日志存在
- getTradeProtalPID 是我自定义的函数,作用是获取当前项目启动的进程号
####获取pid ###
tradePortalPID=0
getTradeProtalPID(){
javaps=`ps -ef | grep $APP_NAME |grep java |grep -v grep`
if [ -n "$javaps" ]; then
tradePortalPID=`ps -ef | grep ${APP_NAME} |grep java|grep -v grep| awk '{print $2}'`
else
tradePortalPID=0
fi
}
3.$tradePortalPID -ne 0 判断进程号是否为0(就是判断进程起来没)
4.\033[32;49;1m [SUCCESS] \033[39;49;0m 自定义输出内容颜色
5.-lt 小于 -gt 大于
读取其他配置文件进脚本
source /opt/jar/start.cfg
读取后可直接 $变量名 引用
完整脚本
#!/bin/bash
#-------------------------------------------------------------------------------------------------------------
#该脚本的使用方式为-->[sh startup.sh]
#该脚本可在服务器上的任意目录下执行,不会影响到日志的输出位置等
#-------------------------------------------------------------------------------------------------------------
#颜色设置
#SETCOLOR_SUCCESS="echo -en \\033[1;32m"
#SETCOLOR_FAILURE="echo -en \\033[1;31m"
#SETCOLOR_NORMAL="echo -en \\033[0;39m"
#设定环境变量
source /opt/jar/start.cfg
#APP_NAME=command-server
#JAR_ZIP_DIR=/opt/jars/command-server/
JAR_FILE=`cd $JAR_ZIP_DIR && ls -at $APP_NAME*.jar |head -n 1`
JAVA_OPTS="-server -Xmx520M -Xms520M -Xmn400M -XX:MaxMetaspaceSize=520M -XX:MetaspaceSize=520M -XX:+UseConcMarkSweepGC -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:+CMSClassUnloadingEnabled -XX:+ParallelRefProcEnabled -XX:+CMSScavengeBeforeRemark"
####获取pid ###
tradePortalPID=0
getTradeProtalPID(){
javaps=`ps -ef | grep $APP_NAME |grep java |grep -v grep`
if [ -n "$javaps" ]; then
tradePortalPID=`ps -ef | grep ${APP_NAME} |grep java|grep -v grep| awk '{print $2}'`
else
tradePortalPID=0
fi
}
#### 启动 ######
start() {
flag=1
getTradeProtalPID
if [ ${tradePortalPID} -ne 0 ];
then
echo "${APP_NAME} already started(PID=${tradePortalPID})"
fi
while [ -f "$logs" ]
do
echo "Starting $APP_NAME ........"
JAR_FILE=`cd $JAR_ZIP_DIR && ls -at $APP_NAME*.jar |head -n 1`
nohup java $JAVA_OPTS -jar $JAR_ZIP_DIR/$JAR_FILE --schedule.blackUser.openFlag=off > "$logs" &
sleep 4
getTradeProtalPID
if [ $tradePortalPID -ne 0 ]; then
echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\) ............." \033[32;49;1m [SUCCESS] \033[39;49;0m"
break;
else
echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\) ............." \033[31;49;1m [Failed] \033[39;49;0m"
flag=`expr $flag + 1`
if [[ "$flag" -gt "$times" ]]
then
echo "limit times ...stop"
break;
fi
fi
done
}
##### 关闭 ########
stop() {
# echo "================================================================================================================"
echo "Stopping $APP_NAME ........"
getTradeProtalPID
if [ $tradePortalPID -ne 0 ]; then
kill -9 $tradePortalPID & getTradeProtalPID
sleep 4
echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\) ............." \033[32;49;1m [SUCCESS] \033[39;49;0m"
# echo "================================================================================================================"
else
sleep 4
echo -e THE ${APP_NAME}\(PID=${tradePortalPID}\) ............." \033[31;49;1m [Failed] \033[39;49;0m"
# echo "================================================================================================================"
fi
}
##### 部署 ########
deploy() {
# echo "================================================================================================================"
echo "deploying $APP_NAME ........"
/opt/apps/ossutil64 cp oss://mtk-deploy/data/ /opt/data/ --recursive --update
/opt/apps/ossutil64 cp oss://mtk-deploy/config/ /opt/config/ --recursive --update
/opt/apps/ossutil64 cp oss://mtk-deploy/$APP_NAME/ /opt/jars/$APP_NAME/ --recursive --update
}
#### 重启
restart() {
stop
sleep 4
start
}
#### 部署并重启
depstart() {
deploy
stop
sleep 8
start
}
#### 选项
case "$1" in
start)
start
;;
stop)
stop
;;
deploy)
deploy
;;
depstart)
depstart
;;
restart)
restart
;;
*)
echo $"Usage: $0 {start|stop|restart|deploy|depstart}"
exit 2
esac
配置文件start.cfg
#!/bin/bash
times=5
wait_time=25s
kewords="Started"
APP_NAME=springcloud-eureka-server
JAR_ZIP_DIR=/opt/jar/
logs=/opt/jar/start.log