start.sh 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. #!/bin/bash
  2. # 项目名称
  3. SERVER_NAME="${project.artifactId}"
  4. # jar名称
  5. JAR_NAME="${project.build.finalName}.jar"
  6. # 进入bin目录
  7. cd `dirname $0`
  8. # bin目录绝对路径
  9. BIN_DIR=`pwd`
  10. # 返回到上一级项目根目录路径
  11. cd ..
  12. # 打印项目根目录绝对路径
  13. # `pwd` 执行系统命令并获得结果
  14. DEPLOY_DIR=`pwd`
  15. # 如果没有指定外部配置文件,则使用默认的配置文件
  16. while getopts ":c:j:" opt
  17. do
  18. case $opt in
  19. j)
  20. # 如果没有指定外部配置文件,则使用默认的配置文件
  21. echo "java命令行参数:$OPTARG"
  22. JAVA_OPTS=$OPTARG
  23. ;;
  24. c)
  25. echo "配置文件路径$OPTARG"
  26. USER_ASSIGN_CONFIG=$OPTARG
  27. ;;
  28. ?)
  29. echo "未知参数"
  30. exit 1;;
  31. esac
  32. done
  33. # 如果指定的是目录,spring则会读取目录中的所有配置文件
  34. if [ -n "$USER_ASSIGN_CONFIG" ]; then
  35. CONF_DIR=$USER_ASSIGN_CONFIG
  36. else
  37. CONF_DIR=$DEPLOY_DIR/config
  38. fi
  39. # SERVER_PORT=`sed '/server.port/!d;s/.*=//' config/application.properties | tr -d '\r'`
  40. # 获取应用的端口号
  41. SERVER_PORT=`sed -nr '/port: [0-9]+/ s/.*port: +([0-9]+).*/\1/p' $CONF_DIR/application.yml|head -1`
  42. PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`
  43. if [ "$1" = "status" ]; then
  44. if [ -n "$PIDS" ]; then
  45. echo "The $SERVER_NAME is running...!"
  46. echo "PID: $PIDS"
  47. exit 0
  48. else
  49. echo "The $SERVER_NAME is stopped"
  50. exit 0
  51. fi
  52. fi
  53. if [ -n "$PIDS" ]; then
  54. echo "ERROR: The $SERVER_NAME already started!"
  55. echo "PID: $PIDS"
  56. exit 1
  57. fi
  58. if [ -n "$SERVER_PORT" ]; then
  59. SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
  60. if [ $SERVER_PORT_COUNT -gt 0 ]; then
  61. echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
  62. exit 1
  63. fi
  64. fi
  65. # 项目日志输出绝对路径
  66. LOGS_DIR=$DEPLOY_DIR/log
  67. # 如果logs文件夹不存在,则创建文件夹
  68. if [ ! -d $LOGS_DIR ]; then
  69. mkdir $LOGS_DIR
  70. fi
  71. STDOUT_FILE=$LOGS_DIR/catalina.log
  72. # JVM Configuration
  73. JAVA_OPTS+=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
  74. JAVA_DEBUG_OPTS=""
  75. if [ "$1" = "debug" ]; then
  76. JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
  77. fi
  78. JAVA_JMX_OPTS=""
  79. if [ "$1" = "jmx" ]; then
  80. JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
  81. fi
  82. JAVA_MEM_OPTS=""
  83. BITS=`java -version 2>&1 | grep -i 64-bit`
  84. if [ -n "$BITS" ]; then
  85. JAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -Xmn256m -Xss256k"
  86. else
  87. JAVA_MEM_OPTS=" -server -Xms512m -Xmx512m"
  88. fi
  89. # 加载外部log4j2文件的配置
  90. LOG_IMPL_FILE=log4j2.xml
  91. LOGGING_CONFIG=""
  92. if [ -f "$CONF_DIR/$LOG_IMPL_FILE" ]
  93. then
  94. LOGGING_CONFIG="-Dlogging.config=$CONF_DIR/$LOG_IMPL_FILE"
  95. fi
  96. CONFIG_FILES=" -Dlogging.path=$LOGS_DIR $LOGGING_CONFIG -Dspring.config.location=$CONF_DIR/ "
  97. echo -e "Starting the $SERVER_NAME ..."
  98. nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS $CONFIG_FILES -jar $DEPLOY_DIR/lib/$JAR_NAME > $STDOUT_FILE 2>&1 &
  99. COUNT=0
  100. while [ $COUNT -lt 1 ]; do
  101. echo -e ".\c"
  102. sleep 1
  103. if [ -n "$SERVER_PORT" ]; then
  104. COUNT=`netstat -an | grep $SERVER_PORT | wc -l`
  105. else
  106. COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
  107. fi
  108. if [ $COUNT -gt 0 ]; then
  109. break
  110. fi
  111. done
  112. echo "OK!"
  113. PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`
  114. echo "PID: $PIDS"
  115. echo "STDOUT: $STDOUT_FILE"