Linux服务器中,如果服务端部署了多个,当服务端程序需要更新时,每次都挨个服务器手工替换程序比较麻烦,现做了一个自动升级的脚本,如下:
#!/bin/bash
# 启动主程序
function StartProcess(){
processcount=`ps -fe|grep MqttMsg2DB |grep -v grep|wc -l`
if [ $processcount -eq 0 ];
then
echo "start MqttMsg2DB.py ..."
#nohup python3 /home/pi/Public/MqttMsg2DB.py >/dev/null 2>&1 &
nohup python3 MqttMsg2DB.py >/dev/null 2>&1 &
else
echo "MqttMsg2DB.py is running.."
fi
}
# 版本比较 参数1是否大于参数2
function version_gt() { test "$(echo "$@" | tr " " "\n" | sort -V | head -n 1)" != "$1"; }
# 更新程序
function UpdateProc(){
CurrentVersion=`python3 -c "import MqttMsg2DB;print(MqttMsg2DB.VERSION);"`
NewVersion=`curl http://123.207.138.126:8235/NewVersion`
echo 'CurrentVersion:'$CurrentVersion 'NewVersion:'$NewVersion
if version_gt "$NewVersion" "$CurrentVersion" ; then
echo '新版本版本大于当前版本'
processcount=`ps -fe|grep MqttMsg2DB |grep -v grep|wc -l`
if [ $processcount -gt 0 ];
then
kill -s 9 `ps -aux | grep "MqttMsg2DB" | awk '{print $2}'`
fi
wget -O MqttMsg2DB.py http://123.207.138.126:8235/download/MqttMsg2DB.py
else
echo '已经是最新版本了'
fi
}
UpdateProc
StartProcess
这个脚本可以放在定时任务中,每隔几分钟启动一次,这样既可以保证目标进程能够正常启动,又可以监控版本更新。
我这里要升级的脚本是一个python脚本,所以使用python3 -c "import MqttMsg2DB;print(MqttMsg2DB.VERSION);"获取本地程序的最新版本,如果需要根据自己的情况修改获取版本的方法。
若您感觉有用就拿去,如有好想法请回复我,以便我改进惠及大众。