翼度科技»论坛 云主机 LINUX 查看内容

shell自动化脚本,启动、停止应用程序

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
  1. #!/usr/bin/env bash
  2. # 常量初始化
  3. set_runtime_vars(){
  4.     # 日期时间
  5.     Now_Date=`date +"%Y-%m-%d %H:%M:%S"`
  6.    
  7.     # 服务状态
  8.     Service_Status=(
  9.         "服务已开启"
  10.         "服务已停止"
  11.     )
  12.    
  13.     # 动作状态
  14.     Action_Status=(
  15.         "服务启动成功"
  16.         "服务停止成功"
  17.         "服务启动失败"
  18.         "服务停止失败"
  19.     )
  20.    
  21.     # 程序名称
  22.     App_Name=(
  23.         "------Java-----"
  24.         "------.Net-----"
  25.         "------Node-----"
  26.         "-----Python----"
  27.         "------Web------"
  28.         "--Java数据模拟--"
  29.         "--.Net数据模拟--"
  30.     )
  31.    
  32.     # 线程名称
  33.     Thread_Name=(
  34.         "java -javaagent:/home/ymliu/Skywalking/Agent/demo_java_linux/ShinyAPM-agent/ShinyAPM-agent.jar -jar /home/ymliu/Skywalking/Agent/demo_java_linux/spring-boot-jpa-thymeleaf-curd-3.0.0.jar"  # java程序在线程中的名称
  35.         "dotnet demo2.dll --environment=Development"  # .net程序在线程中的名称
  36.         "node web.js"  # node程序在线程中的名称
  37.         "python manage.py runserver"  # python程序在线程中的名称
  38.         "dotnet demo_web.dll"  # web程序在线程中的名称
  39.         "DataGenerator.sh"  # Java数据模拟程序在线程中的名称
  40.         "python DataGenerator.py"  # .net数据模拟程序在线程中的名称
  41.     )
  42.    
  43.     # 日志文件
  44.     File_Name=$Script_Dir/start.log
  45. }
  46. # 获取线程数量
  47. Get_Thread_Num(){
  48.     thread_Name=$1
  49.     num=`ps -ef | grep "${thread_Name}" | grep -v grep | wc -l`
  50. }
  51. # 获取线程ID
  52. Get_Thread_ID(){
  53.     thread_Name=$1
  54.     pid=`ps -ef | grep "${thread_Name}" | grep -v grep | awk '{print $2}'`
  55. }
  56. # 检查Java服务状态
  57. Check_Java_Status(){
  58.     Get_Thread_Num "${Thread_Name[0]}"
  59.     Get_Thread_ID "${Thread_Name[0]}"
  60.    
  61.     if [[ $num > 0 && $pid!=null ]]; then
  62.         echo "${App_Name[0]}${Service_Status[0]}"
  63.     else
  64.         echo "${App_Name[0]}${Service_Status[1]}"
  65.     fi
  66. }
  67. # 检查.net服务状态
  68. Check_Net_Status(){
  69.     Get_Thread_Num "${Thread_Name[1]}"
  70.     Get_Thread_ID "${Thread_Name[1]}"
  71.    
  72.     if [[ $num > 0 && $pid!=null ]]; then
  73.         echo "${App_Name[1]}${Service_Status[0]}"
  74.     else
  75.         echo "${App_Name[1]}${Service_Status[1]}"
  76.     fi
  77. }
  78. # 检查node服务状态
  79. Check_Node_Status(){
  80.     Get_Thread_Num "${Thread_Name[2]}"
  81.     Get_Thread_ID "${Thread_Name[2]}"
  82.    
  83.     if [[ $num > 0 && $pid!=null ]]; then
  84.         echo "${App_Name[2]}${Service_Status[0]}"
  85.     else
  86.         echo "${App_Name[2]}${Service_Status[1]}"
  87.     fi
  88. }
  89. # 检查python服务状态
  90. Check_Python_Status(){
  91.     Get_Thread_Num "${Thread_Name[3]}"
  92.     Get_Thread_ID "${Thread_Name[3]}"
  93.    
  94.     if [[ $num > 0 && $pid!=null ]]; then
  95.         echo "${App_Name[3]}${Service_Status[0]}"
  96.     else
  97.         echo "${App_Name[3]}${Service_Status[1]}"
  98.     fi
  99. }
  100. # 检查web服务状态
  101. Check_Web_Status(){
  102.     Get_Thread_Num "${Thread_Name[4]}"
  103.     Get_Thread_ID "${Thread_Name[4]}"
  104.    
  105.     if [[ $num > 0 && $pid!=null ]]; then
  106.         echo "${App_Name[4]}${Service_Status[0]}"
  107.     else
  108.         echo "${App_Name[4]}${Service_Status[1]}"
  109.     fi
  110. }
  111. # 检查Java数据模拟服务状态
  112. Check_JavaData_Status(){
  113.     Get_Thread_Num "${Thread_Name[5]}"
  114.     Get_Thread_ID "${Thread_Name[5]}"
  115.    
  116.     if [[ $num > 0 && $pid!=null ]]; then
  117.         echo "${App_Name[5]}${Service_Status[0]}"
  118.     else
  119.         echo "${App_Name[5]}${Service_Status[1]}"
  120.     fi
  121. }
  122. # 检查.net数据模拟服务状态
  123. Check_NetData_Status(){
  124.     Get_Thread_Num "${Thread_Name[6]}"
  125.     Get_Thread_ID "${Thread_Name[6]}"
  126.    
  127.     if [[ $num > 0 && $pid!=null ]]; then
  128.         echo "${App_Name[6]}${Service_Status[0]}"
  129.     else
  130.         echo "${App_Name[6]}${Service_Status[1]}"
  131.     fi
  132. }
  133. # 启动Java程序
  134. Start_Java_App(){
  135.     if [[ $(Check_Java_Status) == "${App_Name[0]}${Service_Status[0]}" ]]; then
  136.         echo "${App_Name[0]}${Service_Status[0]}"
  137.     else
  138.         cd $Script_Dir/demo_java_linux
  139.         nohup ./start.sh & # 启动程序的命令
  140.         Get_Thread_ID "${Thread_Name[0]}"
  141.         if [[ $(Get_Thread_ID "${Thread_Name[0]}") != null ]]; then
  142.             echo "${App_Name[0]}${Action_Status[0]}"
  143.             echo "${Now_Date}:${App_Name[0]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  144.         else
  145.             echo "${App_Name[0]}${Action_Status[2]}"
  146.             echo "${Now_Date}:${App_Name[0]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
  147.         fi
  148.     fi
  149. }
  150. # 启动net程序
  151. Start_Net_App(){
  152.     if [[ $(Check_Net_Status) == "${App_Name[1]}${Service_Status[0]}" ]]; then
  153.         echo "${App_Name[1]}${Service_Status[0]}"
  154.     else
  155.         cd $Script_Dir/demo_net_linux
  156.         nohup ./start.sh & # 启动程序的命令
  157.         if [[ $(Get_Thread_ID "${Thread_Name[1]}") != null ]]; then
  158.             echo "${App_Name[1]}${Action_Status[0]}"
  159.             echo "${Now_Date}:${App_Name[1]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  160.         else
  161.             echo "${App_Name[1]}${Action_Status[2]}"
  162.             echo "${Now_Date}:${App_Name[1]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
  163.         fi
  164.     fi
  165. }
  166. # 启动node程序
  167. Start_Node_App(){
  168.     if [[ $(Check_Node_Status) == "${App_Name[2]}${Service_Status[0]}" ]]; then
  169.         echo "${App_Name[2]}${Service_Status[0]}"
  170.     else
  171.         cd $Script_Dir/demo_node_linux
  172.         nohup ./start.sh & # 启动程序的命令
  173.         if [[ $(Get_Thread_ID "${Thread_Name[2]}") != null ]]; then
  174.             echo "${App_Name[2]}${Action_Status[0]}"
  175.             echo "${Now_Date}:${App_Name[2]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  176.         else
  177.             echo "${App_Name[2]}${Action_Status[2]}"
  178.             echo "${Now_Date}:${App_Name[2]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
  179.         fi
  180.     fi
  181. }
  182. # 启动python程序
  183. Start_Python_App(){
  184.     if [[ $(Check_Python_Status) == "${App_Name[3]}${Service_Status[0]}" ]]; then
  185.         echo "${App_Name[3]}${Service_Status[0]}"
  186.     else
  187.         cd $Script_Dir/demo_python/mysite
  188.         source venv/bin/activate # 启动python虚拟环境
  189.         nohup ./feizhuru_start.sh & # 启动程序的命令
  190.         if [[ $(Get_Thread_ID "${Thread_Name[3]}") != null ]]; then
  191.             echo "${App_Name[3]}${Action_Status[0]}"
  192.             echo "${Now_Date}:${App_Name[3]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  193.         else
  194.             echo "${App_Name[3]}${Action_Status[2]}"
  195.             echo "${Now_Date}:${App_Name[3]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
  196.         fi
  197.     fi
  198. }
  199. # 启动web程序
  200. Start_Demo_Web(){
  201.     if [[ $(Check_Web_Status) == "${App_Name[4]}${Service_Status[0]}" ]]; then
  202.         echo "${App_Name[4]}${Service_Status[0]}"
  203.     else
  204.         cd $Script_Dir/demo_web
  205.         nohup ./start.sh & #启动程序的命令
  206.         if [[ $(Get_Thread_ID "${Thread_Name[4]}") != null ]]; then
  207.             echo "${App_Name[4]}${Action_Status[0]}"
  208.             echo "${Now_Date}:${App_Name[4]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  209.         else
  210.             echo "${App_Name[4]}${Action_Status[2]}"
  211.             echo "${Now_Date}:${App_Name[4]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
  212.         fi
  213.     fi
  214. }
  215. # 启动Java模拟数据程序
  216. Start_Datagenerator_Bash_App(){
  217.     if [[ $(Check_JavaData_Status) == "${App_Name[5]}${Service_Status[0]}" ]]; then
  218.         echo "${App_Name[5]}${Service_Status[0]}"
  219.     else
  220.         cd $Script_Dir/ScriptFile/bash
  221.         nohup ./DataGenerator.sh & # 启动程序的命令
  222.         if [[ $(Get_Thread_ID "${Thread_Name[5]}") != null ]]; then
  223.             echo "${App_Name[5]}${Action_Status[0]}"
  224.             echo "${Now_Date}:${App_Name[5]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  225.         else
  226.             echo "${App_Name[5]}${Action_Status[2]}"
  227.             echo "${Now_Date}:${App_Name[5]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
  228.         fi
  229.     fi
  230. }
  231. # 启动net模拟数据程序
  232. Start_Datagenerator_Python_App(){
  233.     if [[ $(Check_NetData_Status) == "${App_Name[6]}${Service_Status[0]}" ]]; then
  234.         echo "${App_Name[6]}${Service_Status[0]}"
  235.     else
  236.         cd $Script_Dir/ScriptFile/python
  237.         source venv/bin/activate
  238.         nohup python DataGenerator.py & # 启动程序的命令
  239.         if [[ $(Get_Thread_ID "${Thread_Name[6]}") != null ]]; then
  240.             echo "${App_Name[6]}${Action_Status[0]}"
  241.             echo "${Now_Date}:${App_Name[6]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  242.         else
  243.             echo "${App_Name[6]}${Action_Status[2]}"
  244.             echo "${Now_Date}:${App_Name[6]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
  245.         fi
  246.     fi
  247. }
  248. # 停止Java程序
  249. Stop_Java_App(){
  250.     if [[ $(Check_Java_Status) == "${App_Name[0]}${Service_Status[0]}" ]]; then
  251.         Get_Thread_ID "${Thread_Name[0]}"
  252.         kill -9 $pid
  253.         if [[ $(Get_Thread_Num "${Thread_Name[0]}") > 0 && $(Get_Thread_ID "${Thread_Name[0]}") != null ]]; then
  254.             echo "${App_Name[0]}${Action_Status[3]}"
  255.             echo "${Now_Date}:${App_Name[0]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  256.         else
  257.             echo "${App_Name[0]}${Action_Status[1]}"
  258.             echo "${Now_Date}:${App_Name[0]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
  259.         fi
  260.     else
  261.         echo "${App_Name[0]}${Service_Status[1]}"
  262.     fi
  263. }
  264. # 停止Net程序
  265. Stop_Net_App(){
  266.     if [[ $(Check_Net_Status) == "${App_Name[1]}${Service_Status[0]}" ]]; then
  267.         Get_Thread_ID "${Thread_Name[1]}"
  268.         kill -9 $pid
  269.         if [[ $(Get_Thread_Num "${Thread_Name[1]}") > 0 && $(Get_Thread_ID "${Thread_Name[1]}") != null ]]; then
  270.             echo "${App_Name[1]}${Action_Status[3]}"
  271.             echo "${Now_Date}:${App_Name[1]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  272.         else
  273.             echo "${App_Name[1]}${Action_Status[1]}"
  274.             echo "${Now_Date}:${App_Name[1]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
  275.         fi
  276.     else
  277.         echo "${App_Name[1]}${Service_Status[1]}"
  278.     fi
  279. }
  280. # 停止node程序
  281. Stop_Node_App(){
  282.     if [[ $(Check_Node_Status) == "${App_Name[2]}${Service_Status[0]}" ]]; then
  283.         Get_Thread_ID "${Thread_Name[2]}"
  284.         kill -9 $pid
  285.         if [[ $(Get_Thread_Num "${Thread_Name[2]}") > 0 && $(Get_Thread_ID "${Thread_Name[2]}") != null ]]; then
  286.             echo "${App_Name[2]}${Action_Status[3]}"
  287.             echo "${Now_Date}:${App_Name[2]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  288.         else
  289.             echo "${App_Name[1]}${Action_Status[1]}"
  290.             echo "${Now_Date}:${App_Name[2]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
  291.         fi
  292.     else
  293.         echo "${App_Name[2]}${Service_Status[1]}"
  294.     fi
  295. }
  296. # 停止python程序
  297. Stop_Python_App(){
  298.     if [[ $(Check_Python_Status) == "${App_Name[3]}${Service_Status[0]}" ]]; then
  299.         Get_Thread_ID "${Thread_Name[3]}"
  300.         kill -9 $pid
  301.         if [[ $(Get_Thread_Num "${Thread_Name[3]}") > 0 && $(Get_Thread_ID "${Thread_Name[3]}") != null ]]; then
  302.             echo "${App_Name[3]}${Action_Status[3]}"
  303.             echo "${Now_Date}:${App_Name[3]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  304.         else
  305.             echo "${App_Name[3]}${Action_Status[1]}"
  306.             echo "${Now_Date}:${App_Name[3]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
  307.         fi
  308.     else
  309.         echo "${App_Name[3]}${Service_Status[1]}"
  310.     fi
  311. }
  312. # 停止web程序
  313. Stop_Demo_Web(){
  314.     if [[ $(Check_Web_Status) == "${App_Name[4]}${Service_Status[0]}" ]]; then
  315.         Get_Thread_ID "${Thread_Name[4]}"
  316.         kill -9 $pid
  317.         if [[ $(Get_Thread_Num "${Thread_Name[4]}") > 0 && $(Get_Thread_ID "${Thread_Name[4]}") != null ]]; then
  318.             echo "${App_Name[4]}${Action_Status[3]}"
  319.             echo "${Now_Date}:${App_Name[4]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  320.         else
  321.             echo "${App_Name[4]}${Action_Status[1]}"
  322.             echo "${Now_Date}:${App_Name[4]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
  323.         fi
  324.     else
  325.         echo "${App_Name[4]}${Service_Status[1]}"
  326.     fi
  327. }
  328. # 停止Java模拟数据程序
  329. Stop_Datagenerator_Bash_App(){
  330.     if [[ $(Check_JavaData_Status) == "${App_Name[5]}${Service_Status[0]}" ]]; then
  331.         Get_Thread_ID "${Thread_Name[5]}"
  332.         kill -9 $pid
  333.         if [[ $(Get_Thread_Num "${Thread_Name[5]}") > 0 && $(Get_Thread_ID "${Thread_Name[5]}") != null ]]; then
  334.             echo "${App_Name[5]}${Action_Status[3]}"
  335.             echo "${Now_Date}:${App_Name[5]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  336.         else
  337.             echo "${App_Name[5]}${Action_Status[1]}"
  338.             echo "${Now_Date}:${App_Name[5]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
  339.         fi
  340.     else
  341.         echo "${App_Name[5]}${Service_Status[1]}"
  342.     fi
  343. }
  344. # 停止net模拟数据程序
  345. Stop_Datagenerator_Python_App(){
  346.     if [[ $(Check_NetData_Status) == "${App_Name[6]}${Service_Status[0]}" ]]; then
  347.         Get_Thread_ID "${Thread_Name[6]}"
  348.         kill -9 $pid
  349.         if [[ $(Get_Thread_Num "${Thread_Name[6]}") > 0 && $(Get_Thread_ID "${Thread_Name[6]}") != null ]]; then
  350.             echo "${App_Name[6]}${Action_Status[3]}"
  351.             echo "${Now_Date}:${App_Name[6]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
  352.         else
  353.             echo "${App_Name[6]}${Action_Status[1]}"
  354.             echo "${Now_Date}:${App_Name[6]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
  355.         fi
  356.     else
  357.         echo "${App_Name[6]}${Service_Status[1]}"
  358.     fi
  359. }
  360. # 开启程序
  361. Start_All(){
  362.     Start_Java_App
  363.     Start_Net_App
  364.     Start_Node_App
  365.     Start_Python_App
  366.     Start_Demo_Web
  367.     Start_Datagenerator_Bash_App
  368.     Start_Datagenerator_Python_App
  369. }
  370. # 结束程序
  371. Stop_All(){
  372.     Stop_Java_App
  373.     Stop_Net_App
  374.     Stop_Node_App
  375.     Stop_Python_App
  376.     Stop_Demo_Web
  377.     Stop_Datagenerator_Bash_App
  378.     Stop_Datagenerator_Python_App
  379. }
  380. # 状态查询
  381. Status_All(){
  382.     Check_Java_Status
  383.     Check_Net_Status
  384.     Check_Node_Status
  385.     Check_Python_Status
  386.     Check_Web_Status
  387.     Check_JavaData_Status
  388.     Check_NetData_Status
  389. }
  390. # 主函数
  391. main(){
  392.     # 程序初始化
  393.     Script_Dir=$(
  394.         cd $(dirname "$0") || exit
  395.         pwd
  396.     )
  397.    
  398.     set_runtime_vars
  399.    
  400.     Script_Param=$1
  401.     case ${Script_Param} in
  402.         "start")
  403.             Start_All
  404.         ;;
  405.         "stop")
  406.             Stop_All
  407.         ;;
  408.         "status")
  409.             Status_All
  410.         ;;
  411.         *)
  412.             echo "用法:startup.sh [选项]"
  413.             echo "选项:[status: 状态查询] [start: 开启服务] [stop: 停止服务]"
  414.         ;;
  415.     esac
  416. }
  417. main "$@"
复制代码
来源:https://www.cnblogs.com/lym003/p/17384891.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具