第一次写shell脚本 感觉还不错 这个脚本的主要功能是 以 备用端口启动 主程序 ,然后杀死之前的,再然后 以正常端口启动新程序 然后将备用端口杀死 结合nginx 实现伪无缝部署的功能,以下是 shell脚本的 内容 仅供参考学习shell脚本语言。
#!/bin/bash
cd /park2/
#定义 备用端口号
spareProt=8011
#定义等待时间
waitSec=20
#定义无牌车 备用端口号
nocarPort=8089
echo "请输入正在运行的jar包版本号(如parking-4.1.1.jar,请输入4.1.1)"
read oldJar
echo "请输入想要运行的jar包版本号(如parking-4.1.2.jar,请输入4.1.2)"
read newJar
#获取之前版本的PID 避免 启动新的之后存在冲突
oldPID=$(ps -ef|grep parking-$oldJar.jar|grep -v "grep"|awk '{print$2}')
if [ $? -eq 0 ]
then
echo "当前运行版本的PID为:"$oldPID";"
if [ x$oldPID = "x" ]
then
echo "未查询到正在运行版本的PID,当前版本号为:"$oldJar"请检查"
echo "是否结束脚本?(Y/N)"
read isEnd
if [ $isEnd = "Y" -o $isEnd = "y" ]
then
echo "脚本已结束,感谢使用!"
exit
else
echo "请输入需要杀死的进程的PID:"
read myPID
oldPID=$myPID
fi
fi
else
echo "脚本获取PID出错,脚本结束"
exit
fi
#以备用端口启动新上传的jar包
nohup java -jar parking-$newJar.jar --server.port=$spareProt --nocar.port=$nocarPort &
#判断 新java包是否启动正确
if [ $? -eq 0 ]
then
echo "新版本以"$spareProt"为端口,正常启动,脚本将等待"$waitSec"s..."
sleep $waitSec
else
echo "新版本以"$spareProt"为端口,启动异常,请检查程序是否存在错误,脚本结束"
exit
fi
#杀死 旧进程
kill -9 $oldPID
if [ $? -eq 0 ]
then
echo "旧进程PID:"$oldPID"已被杀死"
else
echo "旧进程PID:"$oldPID"杀死异常,请手动处理,脚本结束"
exit
fi
#获取新版本的PID
newPID=$(ps -ef|grep parking-$newJar.jar|grep -v "grep"|awk '{print$2}')
if [ $? -eq 0 ]
then
echo "当前运行版本"$newJar"的PID为:"$newPID";"
if [ x$oldPID = "x" ]
then
echo "脚本未获得新版本的PID,请检查脚本逻辑是否错误,脚本结束!"
exit
fi
else
echo "脚本获取新版本PID出错,脚本结束"
exit
fi
#以正常端口启动新上传的jar包
nohup java -jar parking-$newJar.jar &
#判断 新java包是否启动正确
if [ $? -eq 0 ]
then
echo "新版本以源端口,正常启动,脚本将等待"$waitSec"s..."
sleep $waitSec
else
echo "新版本以源端口,启动异常,请检查程序是否存在错误,脚本结束"
exit
fi
#杀死 备用端口启动的新进程
kill -9 $newPID
if [ $? -eq 0 ]
then
echo "脚本执行成功,感谢使用!"
else
echo "杀死备用端口进程错误,请检查脚本,或手动处理"
exit
fi