由于服务器站点众多,代码更新后需要到每台服务器上手动操作比较费时,所以准备做个计划任务,通过脚本自动去更新代码重启uwsgi站点
svn_tool.py
#encoding=utf-8
import os
import time
import random
pwd='Vlifun2015'
svn_dir='/home/trunk'
loggfile = "/usr/local/svnupdate.log"
def get_fileSize(filePath):
"""
获取文件大小,返回M
"""
fsize = os.path.getsize(filePath)
fsize = fsize/float(1024 * 1024)
return round(fsize, 2)
def write_log(filePath, msg):
with open(filePath, "+a") as fa:
fa.write(msg+"\n")
def svn_update():
print("in svnupdate")
#大于5M,清空
if os.path.exists(loggfile):
if get_fileSize(loggfile) > 5:
with open(loggfile, "r+") as f:
f.seek(0) #定位到postion 0
f.truncate() #清空文件
result = []
print("try svn up")
ret = os.popen("svn up %s --non-interactive" %(svn_dir))
updateres = ret.read()
t = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
msg = "执行svn更新:{}".format(t)
print(msg)
write_log(loggfile, msg)
write_log(loggfile, updateres)
command = 'killall -9 uwsgi'
if len(updateres) > 67:
waitTime = random.randint(60, 300)
msg="站点将在 {} 秒后自动重启:".format(waitTime)
write_log(loggfile, msg)
time.sleep(waitTime)
t = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
msg = "检测到svn更新,重启站点:{}".format(t)
write_log(loggfile, msg)
ret = os.system('echo %s | sudo -S %s' % (pwd, command))
if ret == 0:
msg = "站点重启成功!"
write_log(loggfile, msg)
else:
msg ="站点重启失败!"
write_log(loggfile, msg)
return True
if __name__=='__main__':
try:
print("start svnup")
svn_update()
except Exception as ex:
pass
设置定时任务
脚本目录/home/trunk/svn_tool.py
crontab -e
如果第一次打开需要选择默认编辑器,也可以通过 命令行 select-editor 重新设定,一般选择vi
设置每分钟的定时任务
*/1 * * * * python /home/trunk/svn_tool.py
保存退出即可