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日

相关文章

  • 如何在Linux上安装libvirt虚拟化工具

    这里是在Linux上安装libvirt虚拟化工具的完整攻略。 1. 安装libvirt 在命令行终端中执行以下命令以安装libvirt: sudo apt-get install libvirt-daemon-system libvirt-clients 2. 安装虚拟化工具 你可以选择KVM、VirtualBox、QEMU等虚拟化工具。在这里,我们以KVM…

    Linux 2023年5月24日
    00
  • Linux中,使用DHCP动态管理主机地址

    DHCP(动态管理主机地址,用来自动分配ip地址,能使手动设置ip换成自动获取、虚拟机中得在桥接模式)             端口:67             配置文件:                   dhcp的主配置文件:/etc/dhcpd.conf 安装dhcpd服务程序 dhcpd服务程序用于提供DHCP协议服务,确认镜像挂载且yum仓库配…

    Linux 2023年4月11日
    00
  • Linux中的工作队列(转载)

    转载自《Linux中的工作队列》 http://blog.chinaunix.net/space.php?uid=487105&do=blog&cuid=971040 [前记]Linux自从2.6.20之后,工作队列发生了一些变化,目前从网络上搜索的资料一般都是介绍老版本的工作队列,很少见到对新版本的介绍。本文对新老版本都做了简要概述,并分别…

    Linux 2023年4月11日
    00
  • [Linux] PHP程序员玩转Linux系列-自动备份与SVN

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 我的代码经常在开发修改,为了代码的安全性,比如哪天误删了文件,或者哪天改错东西了,可以恢复回来,我要搞代码备份.备份代码,我先…

    Linux 2023年4月13日
    00
  • Linux命令中的rpm安装命令

    下面是关于Linux命令中的rpm安装命令的攻略。 什么是rpm包 RPM(Red Hat Package Manager)是Red Hat公司研发的一种软件包管理器。功能类似于Windows下的“.exe”或“msi”安装文件,可以用来管理Linux系统的软件包。 使用rpm命令安装rpm包 通过rpm安装软件包可以使用以下命令: rpm -i packa…

    Linux 2023年5月14日
    00
  • CentOS7.2部署OpenStack(一)—环境准备

    CentOS7.2部署OpenStack(一)—环境准备 简介 OpenStack是一个完整的云计算平台,包含计算、存储、网络等各个方面。本文将介绍如何在CentOS7.2上部署OpenStack。 环境准备 在开始OpenStack的安装之前,需要进行以下环境准备: 安装CentOS7.2系统,并配置网络。 安装OpenStack所需的软件包和依赖项。 配…

    Linux 2023年5月14日
    00
  • [Linux] awk基础编程

      1.awk每次读一行数据,如果设置了-F选项,是在这一行使用分隔符分,$0是全部 2.awk由模式和动作组成 3.条件判断模式{动作} a.txt aaa bbb aaa ccc ddd cat a.txt |awk ‘$1==”aaa”{print “==”$1}’   4./正则模式/{动作}   可以有多个模式动作   5.条件操作符,~匹配正则 …

    Linux 2023年4月13日
    00
  • VMware Tools图文安装教程(以WIN2008和UBUNTU为例)

    VMware Tools图文安装教程(以WIN2008和UBUNTU为例) 什么是VMware Tools VMware Tools是一组增强功能和驱动程序的集合,能够提升虚拟机在VMware环境中的性能和稳定性。它可以实现虚拟机与宿主机之间的文件共享、鼠标键盘的高级支持、时间同步等功能。 安装VMware Tools 我们以Win2008和Ubuntu为例…

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