start.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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. # 如果指定的是目录,spring则会读取目录中的所有配置文件
  17. CONF_DIR=$DEPLOY_DIR/config
  18. # SERVER_PORT=`sed '/server.port/!d;s/.*=//' config/application.properties | tr -d '\r'`
  19. # 获取应用的端口号
  20. SERVER_PORT=`sed -nr '/port: [0-9]+/ s/.*port: +([0-9]+).*/\1/p' config/application.yml`
  21. PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`
  22. if [ "$1" = "status" ]; then
  23. if [ -n "$PIDS" ]; then
  24. echo "The $SERVER_NAME is running...!"
  25. echo "PID: $PIDS"
  26. exit 0
  27. else
  28. echo "The $SERVER_NAME is stopped"
  29. exit 0
  30. fi
  31. fi
  32. if [ -n "$PIDS" ]; then
  33. echo "ERROR: The $SERVER_NAME already started!"
  34. echo "PID: $PIDS"
  35. exit 1
  36. fi
  37. if [ -n "$SERVER_PORT" ]; then
  38. SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
  39. if [ $SERVER_PORT_COUNT -gt 0 ]; then
  40. echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
  41. exit 1
  42. fi
  43. fi
  44. # 项目日志输出绝对路径
  45. LOGS_DIR=$DEPLOY_DIR/logs
  46. # 如果logs文件夹不存在,则创建文件夹
  47. if [ ! -d $LOGS_DIR ]; then
  48. mkdir $LOGS_DIR
  49. fi
  50. STDOUT_FILE=$LOGS_DIR/catalina.log
  51. # JVM Configuration
  52. JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
  53. JAVA_DEBUG_OPTS=""
  54. if [ "$1" = "debug" ]; then
  55. JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
  56. fi
  57. JAVA_JMX_OPTS=""
  58. if [ "$1" = "jmx" ]; then
  59. JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
  60. fi
  61. JAVA_MEM_OPTS=""
  62. BITS=`java -version 2>&1 | grep -i 64-bit`
  63. if [ -n "$BITS" ]; then
  64. JAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -Xmn256m -Xss256k -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m "
  65. else
  66. JAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -Xmn256m -Xss256k -XX:+DisableExplicitGC -XX:+UseG1GC -XX:LargePageSizeInBytes=128m "
  67. fi
  68. # 加载外部log4j2文件的配置
  69. LOG_IMPL_FILE=log4j2.xml
  70. LOGGING_CONFIG=""
  71. if [ -f "$CONF_DIR/$LOG_IMPL_FILE" ]
  72. then
  73. LOGGING_CONFIG="-Dlogging.config=$CONF_DIR/$LOG_IMPL_FILE"
  74. fi
  75. CONFIG_FILES=" -Dlogging.path=$LOGS_DIR $LOGGING_CONFIG -Dspring.config.location=$CONF_DIR/ "
  76. echo -e "Starting the $SERVER_NAME ..."
  77. 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 &
  78. COUNT=0
  79. while [ $COUNT -lt 1 ]; do
  80. echo -e ".\c"
  81. sleep 1
  82. if [ -n "$SERVER_PORT" ]; then
  83. COUNT=`netstat -an | grep $SERVER_PORT | wc -l`
  84. else
  85. COUNT=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}' | wc -l`
  86. fi
  87. if [ $COUNT -gt 0 ]; then
  88. break
  89. fi
  90. done
  91. echo "OK!"
  92. PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`
  93. echo "PID: $PIDS"
  94. echo "STDOUT: $STDOUT_FILE"