赞
踩
项目开发或者部署过程中,开发人员总是因为启动命令的错误,导致启动参数不对,或者环境不对的情况,根据此种情况,作者编写了一个通用的脚本命令
部署目录结构(必须遵守该结构),如:
#--------IFOX
#----短信服务(sms-service)
#----地区服务(area-service)
#----启动脚本ifox-service-sh
1、copy本脚本到项目部署父目录下,如:IFOX下
2、运行命令 sh ifox-service-sh start|stop|restart all|sms-service|area-service all代表启动该目录下全部的jar包
3、查看日志是启动成功。默认等待10S后执行命令,如需修改请自行修改
1、如需修改启动参数,请修改JAVA_OPTS
2、脚本不一定保证正常启动成功,请保证上传jar包能正常运行
#! /bin/sh #使用说明: #部署目录结构(必须遵守该结构),如: #--------IFOX #----短信服务(sms-service) #----地区服务(area-service) #----启动脚本ifox-service-sh # #使用步骤: #1、copy本脚本到项目部署父目录下,如:IFOX下 #2、运行命令 sh ifox-service-sh start|stop|restart all|sms-service|area-service all代表启动该目录下全部的jar包 #3、查看日志是启动成功。默认等待10S后执行命令,如需修改请自行修改 # #注意事项 #1、如需修改启动参数,请修改JAVA_OPTS #2、脚本不一定保证正常启动成功,请保证上传jar包能正常运行 #java虚拟机启动参数 JAVA_OPTS="-Xms256m -Xmx256m -Xmn256m -Xss256k" #启动失败提示语-缺少启动模块 START_ERROR_COMMAND="第二个参数请输入: all | jar包所在文件夹名称" #启动服务 start() { # jar包路径 JAR_PATH=$('pwd') #时间 TIME=$(date "+%Y-%m-%d %H:%M:%S") #控制是否输入参数并给出提示 local commandOk=0 local okCount=0 #参数:具体的模块名或者all(全部模块) local command="$1" if [ "$command" == "" ];then #参数不合法抛出参数提示 echo $START_ERROR_COMMAND return fi echo "-------${TIME}--------正在start:${command}" #循环处理指定文件下全部的jar for JAR in `ls -l ${JAR_PATH}/*/*.jar | awk '{print $9}'` do #jar包名称 JAR_NAME=$(basename $JAR) #jar包目录 JAR_DIR=$(dirname $JAR) #判断输入的参数是否合法 if [ "$command" == "all" ] || [[ "$JAR_DIR" == *"$command"* ]];then #标记输入参数合法 commandOk=1 #启动时间统计初始化 count=0 #获取程序运行情况 PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` if [ -n "$PID" ];then #抛出提示 echo "$JAR_NAME:已经启动,PID=$PID" else #启动服务 exec nohup java $JAVA_OPTS -jar $JAR >> $JAR_DIR/catalina.out 2>&1 & echo "$JAR_NAME 启动中.................." #等待10s sleep 10s #获取PID PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` #自循环判定是否启动 while [ -z "$PID" ] do #一定时间内服务未启动抛出错误提示并终止启动程序 if (($count == 30));then #启动失败 echo "$JAR_NAME:$(expr $count \* 10)秒内未启动,请检查!" break fi #启动过程输出提示,记录启动时间 count=$(($count+1)) echo "$JAR_NAME 启动中.................." #时间阻断:10s sleep 10s #获取PID PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` done #启动成功输出提示并记录启动服务数量 okCount=$(($okCount+1)) echo "$JAR_NAME:已经启动成功,PID=$PID" fi fi done if(($commandOk == 0));then #参数不合法抛出参数提示 echo $START_ERROR_COMMAND else #本次脚本运行结束提示启动服务数量 echo "............本次共启动: $okCount 个服务..........." #换行 echo "" fi } #停止服务 stop() { # jar包路径 JAR_PATH=$('pwd') #时间 TIME=$(date "+%Y-%m-%d %H:%M:%S") #参数:具体的模块名或者all(全部模块) local command="$1" if [ "$command" == "" ];then #参数不合法抛出参数提示 echo $START_ERROR_COMMAND return fi #控制是否输入参数并给出提示 local commandOk=0 #停止服务数量 local okCount=0 echo "-------${TIME}------------正在-stop : ${command}" #循环系统模块数组 for JAR in `ls -l ${JAR_PATH}/*/*.jar | awk '{print $9}'` do #jar包名称 JAR_NAME=$(basename $JAR) #jar包目录 JAR_DIR=$(dirname $JAR) #判断输入的参数是否合法 if [ "$command" == "all" ] || [[ "$JAR_DIR" == *"$command"* ]];then #标记输入参数合法 commandOk=1 #获取程序运行情况 PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` if [ -n "$PID" ];then #抛出提示并结束服务 echo "$JAR_NAME:准备结束,PID=$PID" kill -9 $PID #获取PID PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` #自循环判定是否停止 while [ -n "$PID" ] do #时间阻断:3s监测 sleep 3s #获取PID PID=`ps -ef |grep $(echo $JAR | awk -F/ '{print $NF}') | grep -v grep | awk '{print $2}'` done #抛出结束提示并记录结束服务数量 echo "$JAR_NAME:成功结束" okCount=$(($okCount+1)) else #抛出未启动提示 echo "$JAR_NAME:未运行" fi fi done if (($commandOk == 0));then #参数不合法抛出参数提示 echo "第二个参数请输入:当前文件所在同级文件夹名称" else #本次脚本运行结束提示启动服务数量 echo "............本次共停止: $okCount 个服务............" fi } #执行入口 case "$1" in start) #启动服务 start "$2" ;; stop) #停止服务 stop "$2" ;; restart) #重启服务 stop "$2" sleep 3s start "$2" ;; *) #默认提示 echo "第一个参数请输入:start|stop|restart" exit 1 ;; esac
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。