Linux下使用shell脚本实现自动升级

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);"获取本地程序的最新版本,如果需要根据自己的情况修改获取版本的方法。

若您感觉有用就拿去,如有好想法请回复我,以便我改进惠及大众。

 

你可能感兴趣的:(操作系统,应用程序,服务器)