1. #!/bin/bash
    2. #使用说明,用来提示输入参数
    3. function usage() {
    4. echo "------ 脚本使用说明 ----- "
    5. echo "sh 执行脚本.sh [start|stop|restart|status]"
    6. exit 1
    7. }
    8. # 初始化操作
    9. function init(){
    10. echo "--初始化操作中--"
    11. }
    12. # 读取文件夹下的文件操作
    13. function read_file_dir(){
    14. echo "-- 读取"$1"文件夹下的文件操作 -- "
    15. for file in `ls $1`
    16. do
    17. if [ -d $1"/"$file ]
    18. then
    19. read_file_dir $1"/"$file
    20. else
    21. FILE_NAME=$file
    22. JAR_NAME=$1"/"$file
    23. JAVA_OUT=$1
    24. J=".jar"
    25. # 比较是否事以.jar结尾的文件
    26. if [[ $FILE_NAME == *$J ]]; then
    27. echo "!!!找到符合的文件啦!!!" $1"/"$FILE_NAME
    28. case "$PARAM" in
    29. "start")
    30. #start
    31. start_application
    32. ;;
    33. "stop")
    34. stop_application
    35. ;;
    36. "status")
    37. status
    38. ;;
    39. "restart")
    40. stop_application
    41. start_application
    42. ;;
    43. *)
    44. usage
    45. ;;
    46. esac
    47. fi
    48. fi
    49. done
    50. }
    51. # 启动程序操作
    52. function start_application(){
    53. echo "-- start 启动程序操作 --"
    54. is_running
    55. # $? 显示最后命令的退出状态。0表示没有错误
    56. if [ $? -eq "0" ]; then
    57. echo "${JAR_NAME} is already running. pid=${pid} ."
    58. else
    59. echo "JAR_NAME=========="${JAR_NAME}
    60. echo "JAVA_OUT=========="${JAVA_OUT}
    61. b=${FILE_NAME}
    62. nohup java -Xms128m -Xmx256m -Xmn128m -XX:MaxMetaspaceSize=128m -XX:CompressedClassSpaceSize=64m -Xss256k -XX:InitialCodeCacheSize=4m -XX:ReservedCodeCacheSize=60m -XX:MaxDirectMemorySize=16m -jar ${JAR_NAME} >${JAVA_OUT}/${b%.*}.log 2>&1 &
    63. apid=$(ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}')
    64. echo "started ${FILE_NAME} process. pid=${apid}"
    65. fi
    66. }
    67. # 检查程序是否在运行操作
    68. function is_running(){
    69. echo "-- 检查程序是否在运行 --"
    70. # 查找除了grep操作的 $JAR_NAME 的进程之外的所有进程 这一行信息的第二个字段的值并打印(即pid进程号)
    71. # grep -v 意为不包括 | awk '{print $2}'意为取第二个字段输出
    72. pid=$(ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}')
    73. #如果不存在返回1,存在返回0 -z 检测字符串长度是否为0
    74. if [ -z "${pid}" ]; then
    75. return 1
    76. else
    77. return 0
    78. fi
    79. }
    80. # function status(){}
    81. status(){
    82. is_running
    83. # $? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误
    84. if [ $? -eq "0" ]; then
    85. echo "${JAR_NAME} is running. Pid is ${pid}"
    86. else
    87. echo "${JAR_NAME} is NOT running."
    88. fi
    89. }
    90. function stop_application() {
    91. # checkjavapid=$(ps -ef | grep java | grep ${APP_NAME} | grep -v grep | grep -v 'deploy.sh' | awk '{print$2}')
    92. checkjavapid=$(ps -ef | grep java | grep ${JAR_NAME} | grep -v grep | awk '{print$2}')
    93. if [[ ! $checkjavapid ]]; then
    94. echo -e "\rno java process"
    95. return
    96. fi
    97. echo "stop java process"
    98. times=60
    99. for e in $(seq 60); do
    100. sleep 1
    101. COSTTIME=$(($times - $e))
    102. checkjavapid=$(ps -ef | grep java | grep ${JAR_NAME} | grep -v grep | grep -v 'deploy.sh' | awk '{print$2}')
    103. if [[ $checkjavapid ]]; then
    104. kill -9 $checkjavapid
    105. echo -e "\r -- stopping java lasts $(expr $COSTTIME) seconds."
    106. else
    107. echo -e "\rjava process has exited"
    108. break
    109. fi
    110. done
    111. echo ""
    112. }
    113. echo "-- 脚本开始执行 --"
    114. # 根据脚本输入的参数不同 来执行不同的方法
    115. case "$1" in
    116. "start")
    117. # 执行 start 启动命令
    118. echo "-- 执行 start 启动命令 --"
    119. # 定义参数
    120. PARAM="start"
    121. # 调取函数 同时传递当前文件夹目录
    122. read_file_dir $(pwd)
    123. ;;
    124. "restart")
    125. # 执行 restart 启动命令
    126. echo "-- 执行 restart 启动命令 --"
    127. PARAM="restart"
    128. read_file_dir $(pwd)
    129. ;;
    130. "stop")
    131. # 执行 stop 启动命令
    132. echo "-- 执行 stop 启动命令 --"
    133. PARAM="stop"
    134. read_file_dir $(pwd)
    135. ;;
    136. "status")
    137. # 执行 status 状态查询命令
    138. echo "-- 执行 status 状态查询命令 --"
    139. PARAM="status"
    140. read_file_dir $(pwd)
    141. ;;
    142. *)
    143. # 执行默认命令 调用 usage函数给出提醒
    144. usage
    145. ;;
    146. esac