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[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 "$@"

原文链接:https://www.cnblogs.com/lym003/p/17384891.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:shell自动化脚本,启动、停止应用程序 - Python技术站

(0)
上一篇 2023年5月9日
下一篇 2023年5月10日

相关文章

  • centos8 使用yum 安装 mongodb 4.2的方法

    下面是CentOS 8使用yum安装MongoDB 4.2的完整攻略: 1. 添加MongoDB 4.2仓库 CentOS 8默认的yum源里面并没有MongoDB 4.2版本的安装包,需要添加MongoDB官方的yum源。在终端中执行以下命令: sudo vi /etc/yum.repos.d/mongodb-org-4.2.repo 并将以下内容添加到m…

    Linux 2023年5月14日
    00
  • Linux iotop命令

    Linux iotop命令的作用与使用方法 iotop命令是一款Linux系统下的磁盘输入输出(I/O)监测工具。它可以实时地监测系统中每个进程的I/O使用情况,并对这些进程进行排序和分析,因此可以方便地查找出某个进程使用I/O的情况,从而快速地发现瓶颈,并进行优化。 命令使用方法 使用iotop命令需要先安装,使用以下命令进行安装: sudo apt-ge…

    Linux 2023年3月28日
    00
  • linux下安装jira详细步骤

    下面是在Linux下安装Jira的详细步骤攻略。 准备工作 首先需要确保你的Linux系统已经安装了Java,并且Java的版本是Jira支持的版本。可以前往Jira官方网站查看Jira所支持的Java版本。 在本教程中,我们使用的是CentOS 7系统以及Jira 7.13.3版本。 下载Jira 可以前往Jira官方网站下载Jira,通常以压缩包的方式提…

    Linux 2023年5月14日
    00
  • linux的字符集转换

    查看命令参数 查看支持的字符集    将文件转换成utf-8 的文件(经测试比较鸡肋,不好用) [root@ag-1 hh]# iconv oldboy -f us-ascii -t utf-8 -o test –verbose oldboy: [root@ag-1 hh]#     

    Linux 2023年4月11日
    00
  • Linux基础

    Linux基础 一、计算机种类 台式机 笔记本 服务器 1.服务器的作用 可以尽量避免数据不会丢失 可以24小时不间断提供服务 可以在速度上提升用户体验 2.服务器的分类 云主机服务器 ⼤企业服务器过多可能造成资源浪费,所以对服务器资源进⾏整合 之后根据付费多少分配对应资源给相应⽤户使⽤(类似于租房⼦) 物理主机服务器 机架式服务器 多⽤于服务器数量较多的⼤…

    Linux 2023年4月11日
    00
  • centos系统怎么查看软件安装路径?

    当我们需要查找某个软件的安装路径时,可以通过以下方式在CentOS系统中查找: 方法一:使用whereis命令 whereis命令可以用于查找二进制文件、源代码、手册页等。可以使用whereis命令查找软件的安装路径及相关文件。 步骤: 打开终端界面 输入以下命令: whereis 软件名称 其中,将“软件名称”替换为需要查找的软件名称。例如要查找wget软…

    Linux 2023年5月14日
    00
  • rhel6.3使用yum安装apache的方法

    下面我将为您详细讲解“rhel6.3使用yum安装apache的方法”的完整攻略: 1. 确认yum源可用 在使用yum安装apache之前,需要确认系统的yum源是否可用。可通过以下命令查看: yum list 如果命令执行成功并能够显示yum仓库中的软件包列表,则说明yum源可用。 2. 安装apache软件包 确认yum源可用后,可以使用以下命令安装a…

    Linux 2023年5月14日
    00
  • centos6.4配置163 yum源的方法

    CentOS 6.4 配置 163 yum 源的方法 1. 下载163源的repo文件 wget http://mirrors.163.com/.help/CentOS6-Base-163.repo 2. 修改repo文件 修改下载的repo文件中的 mirrorlist 和 baseurl,将其更改为 163 源的地址。 vim CentOS6-Base-…

    Linux 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部