博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python自动检测更新业务脚本
阅读量:3947 次
发布时间:2019-05-24

本文共 5066 字,大约阅读时间需要 16 分钟。

  • 基于业务,定时检测版本更新。写了个python3脚本去放到定时任务

此实现是建立在容器里面运行业务的情况下实现的

脚本内容如下:

#!/usr/bin/env python3# -*- coding: UTF-8 -*-# Time:2020-10# Author:Shensgimport sysimport osimport time# import readlineimport requests# Gets the current script directory as the working directory // 获取当前脚本目录作为工作目录dir = sys.path[0]os.chdir(dir)# help // 运行脚本的帮助def used_Usge():    help = "Example:\npython3 + %s + servername" % (sys.argv[0])    return help# obtain current version //获取当前版本def current_version(sname):    os.system("docker ps -a | grep -i %s | awk '{print $2}' | awk -F[:] '{print $2}' > ./version.txt" % (sname))    f = open("./version.txt")    vold = f.readline()    return vold# obtain docker image new version //获取docker最新镜像版本def obtain_new_version(sname):    try:        if sname == 0:            print("\033[1;31mInsert server name error\033[0m\033[5;32m!!!...\033[0m")        else:            r = requests.get("http://stry.snwit.com:5000/v2/%s/tags/list" % (sname))            i = r.json()            v = i['tags']            v.sort(reverse=True)            # print(v)            l = v[0]            # print(l)            return l    except EOFError:        print("\033[1;31mAll version obtain fail, exit\033[0m\033[5;32m!!!...\033[0m")        sys.exit(3551)# check versioin update // 检查版本更新def checkup(sname):    newv = obtain_new_version(sname)    # print(newv)    oldv = current_version(sname)    # print("this: %s" % (oldv))    time.sleep(5)    if newv in oldv:        print("\033[1;32mThis's the latest version\033[0m\033[5;32m...\033[0m")        s = "off"        return s    else:        print("\033[1;32mCheck the new version, updating, please wait\033[0m\033[5;32m!!!...\033[0m")        s = "on"        print(s)        return s# check start running status // 检查启动运行状态def running_stated(sname):    os.system("docker ps -a | grep %s | awk '{print $NF}' > ./status.txt" % (sname))    f1 = open("./status.txt")    status1 = f1.readline()    # print("这是状态:%s" % (status1))    if 'snwit' in status1:        os.system("docker logs %s | grep -i 'error' > ./out.txt || echo 'on' > ./out.txt" % (sname))        f2 = open("./out.txt")        logout = f2.readline()        # print(logout)        if 'on' in logout:            print("\033[1;33m %s server is running success\033[0m\033[5;32m!!!...\033[0m" % (sname))            s = "on"            return s        else:            print("\033[1;31m %s server is running fail\033[0m\033[5;32m!!!...\033[0m" % (sname))            s = "off"            return s    else:        print("\033[1;31m%s server is stop\033[0m\033[5;32m!!!...\033[0m")        s = "no"        return s# start server // 启动服务def start_server(sname):    while True:        os.system("docker ps -a |grep %s | awk '{print $NF}' > ./status.txt" % (sname))        f = open("./status.txt")        status = f.readline()        if sname in status:            print("\033[1;32m%s server is running...\nstopping, please wait!\033[0m\033[5;32m...\033[0m" % (sname))            stop_server(sname)            os.system("/data/scripts/runserver %s %s" % (sname, obtain_new_version(sname)))            time.sleep(3)            s = running_stated(sname)            if 'on' in s:                return s            elif 'no' in s:                return s        else:            os.system("/data/scripts/runserver %s %s" % (sname, obtain_new_version(sname)))            time.sleep(3)            s = running_stated(sname)            if 'on' in s:                return s            elif 'no' in s:                return s# stop server // 停止服务def stop_server(sname):    print("\033[1;32m%s server is stopping\033[0m\033[5;32m...\033[0m" % (sname))    while True:        os.system("docker stop %s" % (sname))        time.sleep(3)        os.system("docker rm %s" % (sname))        time.sleep(3)        os.system("docker ps -a | grep %s | awk '{print $NF}' > ./stop.txt" % (sname))        f = open("./stop.txt")        stop_out = f.readline()        if sname in stop_out:            print("\033[1;31m %s server is running !!! please wait\033[0m\033[5;32m...\033[0m" % (sname))            time.sleep(2)            # sys.exit(2)        else:            print("\033[1;32m%s server is stop\033[0m\033[5;32m...\033[0m" % (sname))            time.sleep(2)            s = "stop"            return s            # sys.exit()# update failed version rollback // 更新失败时版本回滚def rollback_server(sname):    print("\033[1;33m%s update fail, %s server is rollback !!!\033[0m\033[5;32m...\033[0m" % (sname, sname))    f = open("./version.txt")    vold = f.readline()    while True:        stop_server(sname)        os.system("/data/scripts/runserver %s %s" % (sname, vold))        time.sleep(3)        s = running_stated(sname)        if 'on' in s:            sys.exit()if __name__ == "__main__":    if len(sys.argv) < 2:        h = used_Usge()        print(h)    else:        sname = sys.argv[1]        obtain_new_version(sname)        l = checkup(sname)        if 'on' in l:            l1 = start_server(sname)            if 'no' in l1:                while True:                    rollback_server(sname)

转载地址:http://qhqwi.baihongyu.com/

你可能感兴趣的文章
Aplix VM安装第一个Java应用在main menu上看不到图标的解决方法
查看>>
java 在cosmos下修改设置,提示“setting are not modifiable”的解释
查看>>
JAD中常见字段的介绍。
查看>>
对于SIM menu update by OTA的解释
查看>>
如何去掉OTA provisioning的PIN码验证
查看>>
如何实现首次开机自动power on 蓝牙?
查看>>
Makefile文件中蓝牙相关的宏介绍
查看>>
如何屏蔽掉乱码的push消息
查看>>
登录一些安全网站,比如twitter/facebook,提示安全链接失败,或提示下载文件。
查看>>
如何去除launcher 上默认的 google search bar.
查看>>
Android如何绘制View
查看>>
23种设计模式的索引
查看>>
Can't make emergency call without SIM card
查看>>
不插SIM卡,不能拨打紧急电话
查看>>
COSMOS上实现IP DIAL功能
查看>>
什么话不可以和上司讲
查看>>
请学会淘汰你的上司
查看>>
以人为本
查看>>
全球分布式创新:企业致胜的关键
查看>>
上司最恨员工哪十大"罪行"
查看>>