編寫腳本內(nèi)容如下:
#!/usr/bin/env bash
# 常量初始化
set_runtime_vars(){
# 日期時間
Now_Date=`date +"%Y-%m-%d %H:%M:%S"`
# 服務狀態(tài)
Service_Status=(
"服務已開啟"
"服務已停止"
)
# 動作狀態(tài)
Action_Status=(
"服務啟動成功"
"服務停止成功"
"服務啟動失敗"
"服務停止失敗"
)
# 程序名稱
App_Name=(
"------Java-----"
"------.Net-----"
"------Node-----"
"-----Python----"
"------Web------"
"--Java數(shù)據(jù)模擬--"
"--.Net數(shù)據(jù)模擬--"
)
# 線程名稱
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數(shù)據(jù)模擬程序在線程中的名稱
"python DataGenerator.py" # .net數(shù)據(jù)模擬程序在線程中的名稱
)
# 日志文件
File_Name=$Script_Dir/start.log
}
# 獲取線程數(shù)量
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服務狀態(tài)
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服務狀態(tài)
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服務狀態(tài)
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服務狀態(tài)
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服務狀態(tài)
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數(shù)據(jù)模擬服務狀態(tài)
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數(shù)據(jù)模擬服務狀態(tài)
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虛擬環(huán)境
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模擬數(shù)據(jù)程序
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模擬數(shù)據(jù)程序
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模擬數(shù)據(jù)程序
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模擬數(shù)據(jù)程序
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
}
# 狀態(tài)查詢
Status_All(){
Check_Java_Status
Check_Net_Status
Check_Node_Status
Check_Python_Status
Check_Web_Status
Check_JavaData_Status
Check_NetData_Status
}
# 主函數(shù)
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: 狀態(tài)查詢] [start: 開啟服務] [stop: 停止服務]"
;;
esac
}
main "$@"
腳本設置開機自啟動
將腳本添加到/etc/rc.local文件中
準確的講/etc下的rc.local文件是rc.d文件中rc.local文件的軟鏈接,找到rc.d下的rc.local文件,添加可執(zhí)行選項。如果沒有該文件可以自己創(chuàng)建。
touch rc.local
chmod +x ./rc.local
在/etc下創(chuàng)建rc.d下的rc.local文件的軟鏈接
ln -s /etc/rc.d/rc.local /etc/
將你需要開機自啟的腳本文件添加到rc.local文件中
sudo vi /etc/rc.local
# 要啟動的腳本的絕對路徑
# shell.name 是你的腳本文件名
# 腳本后面的start是啟動腳本需要的參數(shù),沒有可以不寫
/.../shell.name.sh start
檢查rc-local.service服務是否啟動
要想你的腳本文件開機自啟動還需要用到rc-local.service這個服務。文章來源:http://www.zghlxwxcb.cn/news/detail-437240.html
systemctl status rc-local.service
文章來源地址http://www.zghlxwxcb.cn/news/detail-437240.html
重啟系統(tǒng)
sudo reboot
到了這里,關于shell自動化腳本,啟動、停止應用程序的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!