123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- #!/bin/bash
- # -------------------------------------------------------------------
- # 代码发布 Shell 脚本
- #
- # 可选命令(以下命令都有一个可选参数,就是指定你要启动哪个jar包)
- #
- # - start 启动服务
- # - restart 重启服务
- # - stop 停止服务
- # - ps 查看服务进程
- #
- # 选项列表:
- #
- # -tail(tail -f) 使用 tail -f 在程序启动时顺便打印日志
- # -nv(-not-valid) 不会服务启动是否成功进行验证。如果要满足这个条件请查看认证服务(authentication-foxlibc)的main函数
- # --active(--spring.profile.active) 指定使用哪个配置文件启动, 示例:pub restart --active=dev
- # --debug 设置远程debug,参数只有一个,那就是端口。示例:pub restart --debug=8080
- #
- # 注意事项:-tail 和 -nv 只能选择一个, 如果两个都有的话那么 -tail 的优先级会比 -nv 选项要高, 所以只会执行 -nv
- #
- # 命令示例:
- #
- # start:
- # 无参数启动 - [ pub start ] 默认启动当前所在目录下的 .jar 文件
- # 带参数启动 - [ pub start app.jar ]
- #
- # 其他的命令参数都一致, 无须赘述!
- #
- # @author lts
- # Create By 2022/07/05
- #
- CMD=
- STAT=
- PID=
- WAITS=0
- # ------------------------------------
- # Java服务相关变量
- APP_NAME='*.jar'
- JVM_STAT='vm/stat'
- JVM_DONE='vm/done'
- # ------------------------------------
- # 脚本选项
- OPT_TAIL="N"
- OPT_VALID="Y"
- OPT_ACTIVE=
- OPT_DEBUG=
- # 获取运行命令
- if [ -n "$1" ]; then
- CMD=$1
- else
- echo '-pub error: 启动命令不能为空,可选命令:start | restart | stop'
- fi
- # ------------------------------------
- # 获取选项
- for i in "$@"; do
- if [ "$i" = "-tail" ]; then
- OPT_TAIL="Y"
- fi
- if [ "$i" = "-nv" ]; then
- OPT_VALID="N"
- fi
- if [[ $i = --active* ]]; then
- _TEMP=$i
- OPT_ACTIVE="--spring.profiles.active=${_TEMP#*=}"
- fi
- if [[ $i = --debug* ]]; then
- _TEMP=$i
- OPT_DEBUG="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=${_TEMP#*=}"
- fi
- done
- # ------------------------------------
- # Java启动命令参数
- JAVA_OPTS="nohup java"
- JAVA_OPTS="$JAVA_OPTS $OPT_DEBUG"
- JAVA_OPTS="$JAVA_OPTS -jar $APP_NAME"
- JAVA_OPTS="$JAVA_OPTS $OPT_ACTIVE"
- JAVA_OPTS="$JAVA_OPTS > log.rt 2>&1 &"
- # ------------------------------------
- # function:
- # 启动服务
- function start()
- {
- echo "JAVA_OPTS: $JAVA_OPTS"
- eval $JAVA_OPTS
- echo "应用程序($APP_NAME)启动完成。"
- # 使用 tail -f 查看服务日志
- if [ "$OPT_TAIL" = "Y" ]; then
- tail -f log.rt
- fi
- # 检测服务是否启动成功
- if [ "$OPT_VALID" = "Y" ]; then
- while [ ! -f $JVM_DONE ]; do
- echo "正在检测程序是否启动完成($WAITS)"
- sleep 1
- WAITS=$((WAITS + 1))
- done
- # 获取运行状态
- STAT=$(cat $JVM_STAT | tail -n +1 | head -n 1)
- if [ $STAT -eq 1 ]; then
- echo "服务启动成功($STAT)"
- else
- MSG=$(cat $JVM_STAT | tail -n +2 | head -n 1)
- echo "服务启动失败($STAT), 错误信息: $MSG"
- fi
- fi
- }
- # ------------------------------------
- # function:
- # 停止服务
- function stop()
- {
- PID=$(ps aux | grep java | grep $APP_NAME | awk '{print $2}')
- if [ -n "$PID" ]; then
- kill -9 $PID
- echo "终止进程($PID)"
- else
- echo "未检测出需要终止的进程"
- fi
- }
- # ------------------------------------
- # function:
- # 重启服务
- function restart()
- {
- stop
- start
- }
- # 运行脚本函数
- case "$CMD" in
- "start") start
- ;;
- "stop") stop
- ;;
- "restart") restart
- ;;
- "ps") ps -ef | grep $APP_NAME
- ;;
- *) echo "未知命令($CMD)"
- ;;
- esac
|