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 "$@"
shell自动化脚本,启动、停止应用程序的更多相关文章
- Linux下shell通用脚本启动jar(微服务)
Linux下shell通用脚本启动jar(微服务) vim app_jar.sh #!/bin/bash #source /etc/profile # Auth:Liucx # Please chan ...
- Linux shell脚本启动 停止 重启jar包
最近做的微服务jar包想弄在持续集成中自动化部署,所以首先得有一个操作jar包的脚本 只需将jar文件的路径替换到APP_NAME的值就可以了,其他不用改 注意:window编辑的shell文件,通过 ...
- [shell]管理 Sphinx 启动|停止|重新生成索引的脚本
对于启动sphinx的服务,可以直接输入如下命令 /usr/bin/searchd -c /etc/sphinx/sphinx.conf <!-- /usr/local/bin/searchd ...
- Hadoop实战4:MapR分布式集群的安装配置及shell自动化脚本
MapR的分布式集群安装过程还是很艰难的,远远没有计划中的简单.本人总结安装配置,由于集群有很多机器,手动每台配置是很累的,编写了一个自动化配置脚本,下面以脚本为主线叙述(脚本并不完善,后续继续完善中 ...
- linux脚本启动停止一个jar
###########################启动########################### #!/bin/sh ####定义一个函数在当前文件夹下读取所有jar文件 functi ...
- 几个shell自动化脚本(定期清理、磁盘空间、搜寻关键字)
发布时间:2014-10-28 09:52:17 编辑:AHLinux.com 分享几个精致耐用的shell脚本,分别用于定期清理暂存文件.检查硬盘空间使用率.搜寻所有记录文件的关键字符串.有需要 ...
- 脚本 启动/停止 jar包服务
windows (.bat): @set port=8692 @echo %port% for /f "tokens=5" %%i in ('netstat -aon ^| fin ...
- Appium+Python app自动化测试之脚本启动和停止Appium服务
研究了一段时间的Appium android app的自动化测试,工作中需要连接多台手机终端同时执行测试用例,我实现的方式是获取用例中需要执行用例的设备id个数以及实际连接到的设备数(通过adb de ...
- 【linux】Shell脚本启动程序
Linux 下后台脚本启动Jar程序 Nohup后台输出运行日志 cd /home/zeze/jar/WeiboPost java -jar WeiboAutoPost.jar ../configur ...
- 分享Memcached shell启动停止脚本
注意:要使用这个shell,必须先成功建立memcache环境 1>建立memcached文件和权限 [root@luozhonghua ~]# touch /etc/init.d/memcac ...
随机推荐
- Map遍历增加key报错如何解决
public static void main(String[] args) throws Exception{ Map<String,Object> aa=new HashMap< ...
- 纠删码在实时视频流中的应用丨Dev for Dev 专栏
本文为「Dev for Dev 专栏」系列内容,作者为声网网络体验团队王瑞. 01 背景 在实时音视频通话中,音视频质量受网络丢包影响较大,特别是对于视频. 为什么视频对丢包更敏感呢?通常来说,音频的 ...
- 获得New Bing资格后,在Ubuntu环境下使用New Bing
技术背景 如今基于GPT-4的New Bing,结合搜索引擎的功能,可以说已经达到了非常高的智力水平.虽说ChatGPT的出现打击了很多的行业,但是对我们来说也未必不是一种机遇.合理的使用ChatGP ...
- CSharp读写world文档数据
背景 在工作中需要对比数据,然后输出一份world文档的对比报告.这需要用C#来读写world文件. 用到的工具 NPOI NPOI 地址:NPOI NPOI版本:2.6.0 个人项目的运行时版本:. ...
- gulp中解决es5转es6的方法
1:安装配置文件: cnpm i gulp-babel@7 babel-core -D (@7是因为要使 "gulp-babel": "^7.0.1" 与&q ...
- Knockin' On PHP's Door ---PHP入门必知(持续更新)
1.->.=> 和 :: 区别: :: 类中调用静态方法时用-> 类中调用属性和非静态方法=> 是键值对,比如在关联数组中用 $arr = ["name&quo ...
- python入门教程之十函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...
- Nordic芯片烧录指南
本文讲介绍Nordic系列芯片的烧录方式 一.准备工作 1.硬件 首先需要准备一块Nordic的DK或者Jlink,但是需要注意的是x宝购买的盗版Jlink因为没有license,用一段时间可能会被锁 ...
- devops|中小公司不要做研发效能度量
我特别反感那些不顾公司现状一上来就想要做研发效能度量的人,尤其是想把研发效能度量当成锤子四处去敲打螺丝钉的人. 没几个人的小公司上来就做研发效能度量,就如同普通人一上来直接问媒婆怎么能娶到迪丽热巴.解 ...
- 【从零开始】Docker Desktop:听说你小子要玩我
前言 缘由 捡起遗忘的Docker知识 由于本狗近期项目紧任务重,高强度的搬砖导致摸鱼时间下降.在上线项目时,看到运维大神一系列骚操作,docker+k8s的知识如过眼云烟,忘得干净的很.所以想重新恶 ...