陈正明 发表于 2023-5-9 18:07:56

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

#!/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}"
    Get_Thread_ID "${Thread_Name}"
   
    if [[ $num > 0 && $pid!=null ]]; then
      echo "${App_Name}${Service_Status}"
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 检查.net服务状态
Check_Net_Status(){
    Get_Thread_Num "${Thread_Name}"
    Get_Thread_ID "${Thread_Name}"
   
    if [[ $num > 0 && $pid!=null ]]; then
      echo "${App_Name}${Service_Status}"
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 检查node服务状态
Check_Node_Status(){
    Get_Thread_Num "${Thread_Name}"
    Get_Thread_ID "${Thread_Name}"
   
    if [[ $num > 0 && $pid!=null ]]; then
      echo "${App_Name}${Service_Status}"
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 检查python服务状态
Check_Python_Status(){
    Get_Thread_Num "${Thread_Name}"
    Get_Thread_ID "${Thread_Name}"
   
    if [[ $num > 0 && $pid!=null ]]; then
      echo "${App_Name}${Service_Status}"
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 检查web服务状态
Check_Web_Status(){
    Get_Thread_Num "${Thread_Name}"
    Get_Thread_ID "${Thread_Name}"
   
    if [[ $num > 0 && $pid!=null ]]; then
      echo "${App_Name}${Service_Status}"
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 检查Java数据模拟服务状态
Check_JavaData_Status(){
    Get_Thread_Num "${Thread_Name}"
    Get_Thread_ID "${Thread_Name}"
   
    if [[ $num > 0 && $pid!=null ]]; then
      echo "${App_Name}${Service_Status}"
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 检查.net数据模拟服务状态
Check_NetData_Status(){
    Get_Thread_Num "${Thread_Name}"
    Get_Thread_ID "${Thread_Name}"
   
    if [[ $num > 0 && $pid!=null ]]; then
      echo "${App_Name}${Service_Status}"
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 启动Java程序
Start_Java_App(){
    if [[ $(Check_Java_Status) == "${App_Name}${Service_Status}" ]]; then
      echo "${App_Name}${Service_Status}"
    else
      cd $Script_Dir/demo_java_linux
      nohup ./start.sh & # 启动程序的命令
      Get_Thread_ID "${Thread_Name}"
      if [[ $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
      fi
    fi
}

# 启动net程序
Start_Net_App(){
    if [[ $(Check_Net_Status) == "${App_Name}${Service_Status}" ]]; then
      echo "${App_Name}${Service_Status}"
    else
      cd $Script_Dir/demo_net_linux
      nohup ./start.sh & # 启动程序的命令
      if [[ $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
      fi
    fi
}

# 启动node程序
Start_Node_App(){
    if [[ $(Check_Node_Status) == "${App_Name}${Service_Status}" ]]; then
      echo "${App_Name}${Service_Status}"
    else
      cd $Script_Dir/demo_node_linux
      nohup ./start.sh & # 启动程序的命令
      if [[ $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
      fi
    fi
}

# 启动python程序
Start_Python_App(){
    if [[ $(Check_Python_Status) == "${App_Name}${Service_Status}" ]]; then
      echo "${App_Name}${Service_Status}"
    else
      cd $Script_Dir/demo_python/mysite
      source venv/bin/activate # 启动python虚拟环境
      nohup ./feizhuru_start.sh & # 启动程序的命令
      if [[ $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
      fi
    fi
}

# 启动web程序
Start_Demo_Web(){
    if [[ $(Check_Web_Status) == "${App_Name}${Service_Status}" ]]; then
      echo "${App_Name}${Service_Status}"
    else
      cd $Script_Dir/demo_web
      nohup ./start.sh & #启动程序的命令
      if [[ $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
      fi
    fi
}

# 启动Java模拟数据程序
Start_Datagenerator_Bash_App(){
    if [[ $(Check_JavaData_Status) == "${App_Name}${Service_Status}" ]]; then
      echo "${App_Name}${Service_Status}"
    else
      cd $Script_Dir/ScriptFile/bash
      nohup ./DataGenerator.sh & # 启动程序的命令
      if [[ $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
      fi
    fi
}

# 启动net模拟数据程序
Start_Datagenerator_Python_App(){
    if [[ $(Check_NetData_Status) == "${App_Name}${Service_Status}" ]]; then
      echo "${App_Name}${Service_Status}"
    else
      cd $Script_Dir/ScriptFile/python
      source venv/bin/activate
      nohup python DataGenerator.py & # 启动程序的命令
      if [[ $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动成功,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务启动失败" >> $File_Name # 把时间、应用名称写入日志
      fi
    fi
}

# 停止Java程序
Stop_Java_App(){
    if [[ $(Check_Java_Status) == "${App_Name}${Service_Status}" ]]; then
      Get_Thread_ID "${Thread_Name}"
      kill -9 $pid
      if [[ $(Get_Thread_Num "${Thread_Name}") > 0 && $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
      fi
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 停止Net程序
Stop_Net_App(){
    if [[ $(Check_Net_Status) == "${App_Name}${Service_Status}" ]]; then
      Get_Thread_ID "${Thread_Name}"
      kill -9 $pid
      if [[ $(Get_Thread_Num "${Thread_Name}") > 0 && $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
      fi
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 停止node程序
Stop_Node_App(){
    if [[ $(Check_Node_Status) == "${App_Name}${Service_Status}" ]]; then
      Get_Thread_ID "${Thread_Name}"
      kill -9 $pid
      if [[ $(Get_Thread_Num "${Thread_Name}") > 0 && $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
      fi
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 停止python程序
Stop_Python_App(){
    if [[ $(Check_Python_Status) == "${App_Name}${Service_Status}" ]]; then
      Get_Thread_ID "${Thread_Name}"
      kill -9 $pid
      if [[ $(Get_Thread_Num "${Thread_Name}") > 0 && $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
      fi
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 停止web程序
Stop_Demo_Web(){
    if [[ $(Check_Web_Status) == "${App_Name}${Service_Status}" ]]; then
      Get_Thread_ID "${Thread_Name}"
      kill -9 $pid
      if [[ $(Get_Thread_Num "${Thread_Name}") > 0 && $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
      fi
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 停止Java模拟数据程序
Stop_Datagenerator_Bash_App(){
    if [[ $(Check_JavaData_Status) == "${App_Name}${Service_Status}" ]]; then
      Get_Thread_ID "${Thread_Name}"
      kill -9 $pid
      if [[ $(Get_Thread_Num "${Thread_Name}") > 0 && $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
      fi
    else
      echo "${App_Name}${Service_Status}"
    fi
}

# 停止net模拟数据程序
Stop_Datagenerator_Python_App(){
    if [[ $(Check_NetData_Status) == "${App_Name}${Service_Status}" ]]; then
      Get_Thread_ID "${Thread_Name}"
      kill -9 $pid
      if [[ $(Get_Thread_Num "${Thread_Name}") > 0 && $(Get_Thread_ID "${Thread_Name}") != null ]]; then
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止失败,线程ID=${pid}" >> $File_Name # 把时间、应用名称写入日志
      else
            echo "${App_Name}${Action_Status}"
            echo "${Now_Date}:${App_Name}应用服务停止成功" >> $File_Name # 把时间、应用名称写入日志
      fi
    else
      echo "${App_Name}${Service_Status}"
    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 "选项: "
      ;;
    esac
}

main "$@"
来源:https://www.cnblogs.com/lym003/p/17384891.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: shell自动化脚本,启动、停止应用程序