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

  • shell自动化脚本,启动、停止应用程序已关闭评论
  • 146 次浏览
  • A+
所属分类:linux技术
#!/usr/bin/env bash  # 常量初始化 set_runtime_vars(){     # 日期时间     Now_Date=`date +"%Y-%m-%d %H:%M:%S"`          # 服务状态     Service_Status=(         "服务已开启"         "服务已停止"     )          # 动作状态     Action_Status=(         "服务启动成功"         "服务停止成功"         "服务启动失败"         "服务停止失败"     )          # 程序名称     App_Name=(         "------Java-----"         "------.Net-----"         "------Node-----"         "-----Python----"         "------Web------"         "--Java数据模拟--"         "--.Net数据模拟--"     )          # 线程名称     Thread_Name=(         "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程序在线程中的名称         "dotnet demo2.dll --environment=Development"  # .net程序在线程中的名称         "node web.js"  # node程序在线程中的名称         "python manage.py runserver"  # python程序在线程中的名称         "dotnet demo_web.dll"  # web程序在线程中的名称         "DataGenerator.sh"  # Java数据模拟程序在线程中的名称         "python DataGenerator.py"  # .net数据模拟程序在线程中的名称     )          # 日志文件     File_Name=$Script_Dir/start.log }  # 获取线程数量 Get_Thread_Num(){     thread_Name=$1     num=`ps -ef | grep "${thread_Name}" | grep -v grep | wc -l` }  # 获取线程ID Get_Thread_ID(){     thread_Name=$1     pid=`ps -ef | grep "${thread_Name}" | grep -v grep | awk '{print $2}'` }  # 检查Java服务状态 Check_Java_Status(){     Get_Thread_Num "${Thread_Name[0]}"     Get_Thread_ID "${Thread_Name[0]}"          if [[ $num > 0 && $pid!=null ]]; then         echo "${App_Name[0]}${Service_Status[0]}"     else         echo "${App_Name[0]}${Service_Status[1]}"     fi }  # 检查.net服务状态 Check_Net_Status(){     Get_Thread_Num "${Thread_Name[1]}"     Get_Thread_ID "${Thread_Name[1]}"          if [[ $num > 0 && $pid!=null ]]; then         echo "${App_Name[1]}${Service_Status[0]}"     else         echo "${App_Name[1]}${Service_Status[1]}"     fi }  # 检查node服务状态 Check_Node_Status(){     Get_Thread_Num "${Thread_Name[2]}"     Get_Thread_ID "${Thread_Name[2]}"          if [[ $num > 0 && $pid!=null ]]; then         echo "${App_Name[2]}${Service_Status[0]}"     else         echo "${App_Name[2]}${Service_Status[1]}"     fi }  # 检查python服务状态 Check_Python_Status(){     Get_Thread_Num "${Thread_Name[3]}"     Get_Thread_ID "${Thread_Name[3]}"          if [[ $num > 0 && $pid!=null ]]; then         echo "${App_Name[3]}${Service_Status[0]}"     else         echo "${App_Name[3]}${Service_Status[1]}"     fi }  # 检查web服务状态 Check_Web_Status(){     Get_Thread_Num "${Thread_Name[4]}"     Get_Thread_ID "${Thread_Name[4]}"          if [[ $num > 0 && $pid!=null ]]; then         echo "${App_Name[4]}${Service_Status[0]}"     else         echo "${App_Name[4]}${Service_Status[1]}"     fi }  # 检查Java数据模拟服务状态 Check_JavaData_Status(){     Get_Thread_Num "${Thread_Name[5]}"     Get_Thread_ID "${Thread_Name[5]}"          if [[ $num > 0 && $pid!=null ]]; then         echo "${App_Name[5]}${Service_Status[0]}"     else         echo "${App_Name[5]}${Service_Status[1]}"     fi }  # 检查.net数据模拟服务状态 Check_NetData_Status(){     Get_Thread_Num "${Thread_Name[6]}"     Get_Thread_ID "${Thread_Name[6]}"          if [[ $num > 0 && $pid!=null ]]; then         echo "${App_Name[6]}${Service_Status[0]}"     else         echo "${App_Name[6]}${Service_Status[1]}"     fi }  # 启动Java程序 Start_Java_App(){     if [[ $(Check_Java_Status) == "${App_Name[0]}${Service_Status[0]}" ]]; then         echo "${App_Name[0]}${Service_Status[0]}"     else         cd $Script_Dir/demo_java_linux         nohup ./start.sh & # 启动程序的命令         Get_Thread_ID "${Thread_Name[0]}"         if [[ $(Get_Thread_ID "${Thread_Name[0]}") != null ]]; then             echo "${App_Name[0]}${Action_Status[0]}"             echo "${Now_Date}:${App_Name[0]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[0]}${Action_Status[2]}"             echo "${Now_Date}:${App_Name[0]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志         fi     fi }  # 启动net程序 Start_Net_App(){     if [[ $(Check_Net_Status) == "${App_Name[1]}${Service_Status[0]}" ]]; then         echo "${App_Name[1]}${Service_Status[0]}"     else         cd $Script_Dir/demo_net_linux         nohup ./start.sh & # 启动程序的命令         if [[ $(Get_Thread_ID "${Thread_Name[1]}") != null ]]; then             echo "${App_Name[1]}${Action_Status[0]}"             echo "${Now_Date}:${App_Name[1]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[1]}${Action_Status[2]}"             echo "${Now_Date}:${App_Name[1]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志         fi     fi }  # 启动node程序 Start_Node_App(){     if [[ $(Check_Node_Status) == "${App_Name[2]}${Service_Status[0]}" ]]; then         echo "${App_Name[2]}${Service_Status[0]}"     else         cd $Script_Dir/demo_node_linux         nohup ./start.sh & # 启动程序的命令         if [[ $(Get_Thread_ID "${Thread_Name[2]}") != null ]]; then             echo "${App_Name[2]}${Action_Status[0]}"             echo "${Now_Date}:${App_Name[2]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[2]}${Action_Status[2]}"             echo "${Now_Date}:${App_Name[2]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志         fi     fi }  # 启动python程序 Start_Python_App(){     if [[ $(Check_Python_Status) == "${App_Name[3]}${Service_Status[0]}" ]]; then         echo "${App_Name[3]}${Service_Status[0]}"     else         cd $Script_Dir/demo_python/mysite         source venv/bin/activate # 启动python虚拟环境         nohup ./feizhuru_start.sh & # 启动程序的命令         if [[ $(Get_Thread_ID "${Thread_Name[3]}") != null ]]; then             echo "${App_Name[3]}${Action_Status[0]}"             echo "${Now_Date}:${App_Name[3]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[3]}${Action_Status[2]}"             echo "${Now_Date}:${App_Name[3]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志         fi     fi }  # 启动web程序 Start_Demo_Web(){     if [[ $(Check_Web_Status) == "${App_Name[4]}${Service_Status[0]}" ]]; then         echo "${App_Name[4]}${Service_Status[0]}"     else         cd $Script_Dir/demo_web         nohup ./start.sh & #启动程序的命令         if [[ $(Get_Thread_ID "${Thread_Name[4]}") != null ]]; then             echo "${App_Name[4]}${Action_Status[0]}"             echo "${Now_Date}:${App_Name[4]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[4]}${Action_Status[2]}"             echo "${Now_Date}:${App_Name[4]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志         fi     fi }  # 启动Java模拟数据程序 Start_Datagenerator_Bash_App(){     if [[ $(Check_JavaData_Status) == "${App_Name[5]}${Service_Status[0]}" ]]; then         echo "${App_Name[5]}${Service_Status[0]}"     else         cd $Script_Dir/ScriptFile/bash         nohup ./DataGenerator.sh & # 启动程序的命令         if [[ $(Get_Thread_ID "${Thread_Name[5]}") != null ]]; then             echo "${App_Name[5]}${Action_Status[0]}"             echo "${Now_Date}:${App_Name[5]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[5]}${Action_Status[2]}"             echo "${Now_Date}:${App_Name[5]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志         fi     fi }  # 启动net模拟数据程序 Start_Datagenerator_Python_App(){     if [[ $(Check_NetData_Status) == "${App_Name[6]}${Service_Status[0]}" ]]; then         echo "${App_Name[6]}${Service_Status[0]}"     else         cd $Script_Dir/ScriptFile/python         source venv/bin/activate         nohup python DataGenerator.py & # 启动程序的命令         if [[ $(Get_Thread_ID "${Thread_Name[6]}") != null ]]; then             echo "${App_Name[6]}${Action_Status[0]}"             echo "${Now_Date}:${App_Name[6]}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[6]}${Action_Status[2]}"             echo "${Now_Date}:${App_Name[6]}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志         fi     fi }  # 停止Java程序 Stop_Java_App(){     if [[ $(Check_Java_Status) == "${App_Name[0]}${Service_Status[0]}" ]]; then         Get_Thread_ID "${Thread_Name[0]}"         kill -9 $pid         if [[ $(Get_Thread_Num "${Thread_Name[0]}") > 0 && $(Get_Thread_ID "${Thread_Name[0]}") != null ]]; then             echo "${App_Name[0]}${Action_Status[3]}"             echo "${Now_Date}:${App_Name[0]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[0]}${Action_Status[1]}"             echo "${Now_Date}:${App_Name[0]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志         fi     else         echo "${App_Name[0]}${Service_Status[1]}"     fi }  # 停止Net程序 Stop_Net_App(){     if [[ $(Check_Net_Status) == "${App_Name[1]}${Service_Status[0]}" ]]; then         Get_Thread_ID "${Thread_Name[1]}"         kill -9 $pid         if [[ $(Get_Thread_Num "${Thread_Name[1]}") > 0 && $(Get_Thread_ID "${Thread_Name[1]}") != null ]]; then             echo "${App_Name[1]}${Action_Status[3]}"             echo "${Now_Date}:${App_Name[1]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[1]}${Action_Status[1]}"             echo "${Now_Date}:${App_Name[1]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志         fi     else         echo "${App_Name[1]}${Service_Status[1]}"     fi }  # 停止node程序 Stop_Node_App(){     if [[ $(Check_Node_Status) == "${App_Name[2]}${Service_Status[0]}" ]]; then         Get_Thread_ID "${Thread_Name[2]}"         kill -9 $pid         if [[ $(Get_Thread_Num "${Thread_Name[2]}") > 0 && $(Get_Thread_ID "${Thread_Name[2]}") != null ]]; then             echo "${App_Name[2]}${Action_Status[3]}"             echo "${Now_Date}:${App_Name[2]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[1]}${Action_Status[1]}"             echo "${Now_Date}:${App_Name[2]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志         fi     else         echo "${App_Name[2]}${Service_Status[1]}"     fi }  # 停止python程序 Stop_Python_App(){     if [[ $(Check_Python_Status) == "${App_Name[3]}${Service_Status[0]}" ]]; then         Get_Thread_ID "${Thread_Name[3]}"         kill -9 $pid         if [[ $(Get_Thread_Num "${Thread_Name[3]}") > 0 && $(Get_Thread_ID "${Thread_Name[3]}") != null ]]; then             echo "${App_Name[3]}${Action_Status[3]}"             echo "${Now_Date}:${App_Name[3]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[3]}${Action_Status[1]}"             echo "${Now_Date}:${App_Name[3]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志         fi     else         echo "${App_Name[3]}${Service_Status[1]}"     fi }  # 停止web程序 Stop_Demo_Web(){     if [[ $(Check_Web_Status) == "${App_Name[4]}${Service_Status[0]}" ]]; then         Get_Thread_ID "${Thread_Name[4]}"         kill -9 $pid         if [[ $(Get_Thread_Num "${Thread_Name[4]}") > 0 && $(Get_Thread_ID "${Thread_Name[4]}") != null ]]; then             echo "${App_Name[4]}${Action_Status[3]}"             echo "${Now_Date}:${App_Name[4]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[4]}${Action_Status[1]}"             echo "${Now_Date}:${App_Name[4]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志         fi     else         echo "${App_Name[4]}${Service_Status[1]}"     fi }  # 停止Java模拟数据程序 Stop_Datagenerator_Bash_App(){     if [[ $(Check_JavaData_Status) == "${App_Name[5]}${Service_Status[0]}" ]]; then         Get_Thread_ID "${Thread_Name[5]}"         kill -9 $pid         if [[ $(Get_Thread_Num "${Thread_Name[5]}") > 0 && $(Get_Thread_ID "${Thread_Name[5]}") != null ]]; then             echo "${App_Name[5]}${Action_Status[3]}"             echo "${Now_Date}:${App_Name[5]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[5]}${Action_Status[1]}"             echo "${Now_Date}:${App_Name[5]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志         fi     else         echo "${App_Name[5]}${Service_Status[1]}"     fi }  # 停止net模拟数据程序 Stop_Datagenerator_Python_App(){     if [[ $(Check_NetData_Status) == "${App_Name[6]}${Service_Status[0]}" ]]; then         Get_Thread_ID "${Thread_Name[6]}"         kill -9 $pid         if [[ $(Get_Thread_Num "${Thread_Name[6]}") > 0 && $(Get_Thread_ID "${Thread_Name[6]}") != null ]]; then             echo "${App_Name[6]}${Action_Status[3]}"             echo "${Now_Date}:${App_Name[6]}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志         else             echo "${App_Name[6]}${Action_Status[1]}"             echo "${Now_Date}:${App_Name[6]}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志         fi     else         echo "${App_Name[6]}${Service_Status[1]}"     fi }  # 开启程序 Start_All(){     Start_Java_App     Start_Net_App     Start_Node_App     Start_Python_App     Start_Demo_Web     Start_Datagenerator_Bash_App     Start_Datagenerator_Python_App }  # 结束程序 Stop_All(){     Stop_Java_App     Stop_Net_App     Stop_Node_App     Stop_Python_App     Stop_Demo_Web     Stop_Datagenerator_Bash_App     Stop_Datagenerator_Python_App }  # 状态查询 Status_All(){     Check_Java_Status     Check_Net_Status     Check_Node_Status     Check_Python_Status     Check_Web_Status     Check_JavaData_Status     Check_NetData_Status }  # 主函数 main(){     # 程序初始化     Script_Dir=$(         cd $(dirname "$0") || exit         pwd     )          set_runtime_vars          Script_Param=$1     case ${Script_Param} in         "start")             Start_All         ;;         "stop")             Stop_All         ;;         "status")             Status_All         ;;         *)             echo "用法:startup.sh [选项]"             echo "选项:[status: 状态查询] [start: 开启服务] [stop: 停止服务]"         ;;     esac }  main "$@"