#!/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`}# 获取线程IDGet_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 "$@"