前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 基于 FTP 历史版本一键部署

Python 基于 FTP 历史版本一键部署

作者头像
Wu_Candy
发布于 2024-03-12 09:35:54
发布于 2024-03-12 09:35:54
11700
代码可运行
举报
文章被收录于专栏:无量测试之道无量测试之道
运行总次数:0
代码可运行

1、执行命令

一键部署历史版本执行命令为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python ftp_tools.py 20240125
2、核心 Python 代码

ftp_tools.py脚本内容为:

(1)、需要接收一个日期的格式参数,以便从 ftp 上面去获取相应的历史版本部署包,获取到历史部署包后会在本地解压并且解决下载的原始压缩包

(2)、最后再调用一个sh的 shell 脚本去执行停服务,部署,启动服务

[root@111]# more ftp_tools.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#coding:utf8
from ftplib import FTP
import sys
import os
import shutil
import re
import time
import datetime

ftp_host = "10.10.1.11"
ftp_user = "admin"
ftp_passwd = "test111"
ftppath="/deploy/fc/" #ftp上的目录地址
pathdir = r"D:\historyData"
pwdpath = os.path.abspath(".") #下载到当前目录地址
commands = sys.argv

def _login_ftp():
    try:
        conn = FTP()
        conn.connect(host=ftp_host,timeout=15)
        conn.login(ftp_user,ftp_passwd)
        conn.encoding = "utf-8"
    except:
        sys.exit("创建ftp连接失败!请检查ftp登录信息是否正常!")
    else:
        return conn

def downloadfile(ftp, remotepath, localpath):
    '''
        remotepath: ftp上面的目录地址
        localpath: 本地目录地址
    '''
    filename = os.path.split(remotepath)[-1]#将path分割成目录和文件名的二元组返回
    print("开始下载文件%s到本地%s"%(filename,localpath))
    localpath = os.path.join(localpath,filename)
    localfile=localpath.split(".")[0]
    if(os.path.exists(localfile)):
        print("文件存在")
        shutil.rmtree(localfile, True)
        time.sleep(5)
    else:
        print("本地此文件不存在")
    fp = open(localpath,'wb')
    print("正在下载中...")
    ftp.retrbinary('RETR ' + remotepath, fp.write)
    ftp.set_debuglevel(0)
    fp.close()
    print("下载结束!")

def uploadfile(ftp, remotepath, localfilepath):
    '''
        remotepath: ftp上面的目录地址
        localfilepath: 本地文件目录地址
    '''
    filename = os.path.split(localfilepath)[-1]
    print("开始上传文件%s到ftp%s"%(filename,remotepath))
    remotepath = "/".join([remotepath,filename])
    buf_size = 1024*1024*15
    fp = open(localfilepath, 'rb')
    ftp.storbinary('STOR '+ remotepath , fp, buf_size)
    ftp.set_debuglevel(0)
    fp.close()
    print("上传结束!")

def unpack_archive(zippathfile,unzippathfile):
    '''
    :param zippathfile: 压缩文件路径
    :param unzippathfile: 解压文件存放路径
    :return: 解压完毕后删除压缩文件包
    '''
    try:
        filename = os.path.splitext(os.path.split(zippathfile)[-1])[0]
        print("开始解压文件:",filename)
        shutil.unpack_archive(zippathfile,os.path.join(unzippathfile,filename))
        print("删除原压缩文件",filename)
        os.remove(zippathfile)
    except Exception as e:
        sys.exit(e.__str__())
    return True

def upload(filename):
    print("上传开始")
    filepath = os.path.join(pwdpath,filename)
    print("本地配置文件路径为:",filepath)
    if os.path.exists(filepath):
        uploadfile(_login_ftp(),ftppath,filepath)
        #import time
        #time.sleep(3)
        #os.remove(filepath)
        #print("删除本地原文件完成")
    else:
        sys.exit("请求参数错误,未发现相关文件!")

def download(filename):
    global  ftppath
    ftppath += filename
    downloadfile(_login_ftp(),ftppath,pwdpath)
    unpack_archive(os.path.join(pwdpath,filename),pwdpath)
    ftppath="/deploy/fc/"

if __name__ == '__main__':
    now=sys.argv[1]
    files=[str(now)+"-FO.zip",str(now)+"-FOStorage.zip",str(now)+"-FOSentinel.zip"]
    print(files)
    for file in files:
        print(file)
        download(file)
    import subprocess
subprocess.call('sh deploy_history_version.sh %s'%now, shell=True)
3、核心 Shell 代码

以下是python脚本执行部署时调用的 shell 脚本代码:

[root@111]# more deploy_history_version.sh

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#/bin/sh
echo $1
sh /opt/FO/allstop.sh
\cp -rf /data/deploy/history_package_dir/$1-FOStorage/FOStorage/bin/FOStorage.out /opt/FO/FOStorage/bin
\cp -rf /data/deploy/history_package_dir/$1-FO/Automatic/* /opt/FO/Automatic
rm -rf /opt/FO/ETL/lib/*
\cp -rf /data/deploy/history_package_dir/$1-FO/ETL/* /opt/FO/ETL
\cp -rf /data/deploy/history_package_dir/$1-FO/FODBMerge/* /opt/FO/FODB
\cp -rf /data/deploy/history_package_dir/$1-FO/FOHost/* /opt/FO/FOHost
\cp -rf /data/deploy/history_package_dir/$1-FO/Monitor/* /opt/FO/Monitor
\cp -rf /data/deploy/history_package_dir/$1-FO/Server/* /opt/FO/OServer
\cp -rf /data/deploy/history_package_dir/$1-FO/ScheduleTask/* /opt/FO/Schedule
\cp -rf /data/deploy/history_package_dir/$1-FO/ScheduleTimer/* /opt/FO/ScheduleTimer
\cp -rf /data/deploy/history_package_dir/$1-FO/Web/* /opt/FO/Web
\cp -rf /data/deploy/history_package_dir/$1-FO/XService/* /opt/FO/XService

sh /opt/FO/allstart.sh
rm -rf /data/deploy/history_package_dir/$1-*

今天分享的内容主要为代码的分享,进步与成长可以使人获得长期的快乐,希望我们一起快乐呀~

如果你觉得文章不错的话,分享、收藏,在看,关注将会是对我的最大支持,也是我持续更新的最大动力

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python paramiko
近段时间用Python写一个小东西,每次修改代码后要手工上传到服务器,觉得很麻烦,虽然有WinSCP,找了一下资料,发现paramiko可以实现自动上传文件的功能,可惜的是,折腾了半天,在Python3.3下没有成功,最后退而求其次安装了2.7才弄好,记录如下:
py3study
2020/01/06
1.5K0
java实用工具类——使用java代码实现ftp上传下载工具类
小编最近忙着学习项目构架上的一些技术,把实用的工具类整理下,单独放在一个项目。其他项目需要用直接使用maven依赖一下就可以使用了。项目中需要实现上传多张图片,由于多张图片,又担心并发量大。所以小编做了一个负载均衡,把上传后的图片保存到linux上的ftp中去,不了解linux上的ftp小编后期编写个教程。
全栈程序员站长
2022/08/12
2.2K0
Python 基于Python实现的ssh兼sftp客户端(上)
https://pypi.python.org/pypi/paramiko/1.15.2
授客
2019/09/11
1.4K0
Python 基于Python实现的ssh兼sftp客户端(上)
python ftp工具类 上传、下载文件夹 封装类
-------------------------常用工具------------------------------------------------------------
用户5760343
2022/05/13
1.3K0
深入PHP FTP类的详解
FTP是一种文件传输协议,它支持两种模式,一种方式叫做Standard (也就是Active,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP 的客户端发送 PORT 命令到FTP server。Passive模式FTP的客户端发送 PASV命令到 FTP Server。 下面介绍一个这两种方式的工作原理: Standard模式 FTP 客户端首先和FTP Server的TCP 21端口建立连接,通过这个通道 发送命令,客户端需要接收数据的时候在这个通道上发送
Sindsun
2018/04/28
2.4K0
python脚本之ftp上传日志
因为ssoc日志巨大,很快就把磁盘占满。需要每天把备份上传到ftp服务器上,所以根据网上的资料,做了个简单的脚本。算是第一次自己拼凑出的脚本。还很简单,特别是把异常处理简化了。因为本身单一,然后把屏幕输出用管道命令》直接写到本地文件,充当日志。很懒的一个版本。还需加工。
py3study
2020/01/07
1.7K0
go语言实现通过FTP库自动上传web日志
因为平时管理的web服务器都是VM服务器,为节省硬盘空间,一般给虚拟机分配的硬盘空间都比较小,只有8G,因为,保存不了多少日志,所以每天都需要把每台WEB日志转移到一个硬盘比较大的服务器上,然后再使用NBU集中备份,本程序主要使用go语言实现实现将web日志通过FTP自动上传FTP服务器,使用了filepath.Walk遍历日志目录及第三方纯go库“github.com/jlaffaye/ftp”,而日志VM本地存储路径格式是 /var/log/weblog/www.domainName.com/month
李海彬
2018/03/20
2.2K0
python 上传所有文件到FTP服务器 脚本
import os, sys, ftplib from getpass import getpass from mimetypes import guess_type
用户5760343
2022/05/13
2.1K0
python基础操作以及hdfs操作
一、前言        作为一个全栈工程师,必须要熟练掌握各种语言。。。HelloWorld。最近就被“逼着”走向了python开发之路,大体实现的功能是写一个通用类库将服务器本地存储的文件进行简单清洗后转储到HDFS中,所以基本上python的相关知识都涉及到了,这里对一些基础操作以及hdfs操作做一总结,以备查阅。 二、基础操作 2.1 字符串操作        字符串操作应该是所有语言的基础。python基本上也提供了其他语言常用的一些字符串处理函数,常用的如下: 1、startswith 以某个字
魏守峰
2018/04/28
1.1K0
超硬核!11 个非常实用的 Python 和 Shell 拿来就用脚本实例!
在上一篇分享的原创文章《7 个非常实用的 Shell 拿来就用脚本实例!》中,从这篇文章的阅读、点赞、在看、留言的数据来看,非常受读者欢迎。不得不说,脚本在我们的日常工作中可以提高很大的工作效率,的确很香!
杰哥的IT之旅
2021/04/20
7300
python搭建FTP服务器之FTP上传和下载
Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件,函数列举如下
周小董
2019/03/25
10.5K0
系统运维工程师的法宝:python pa
安装:pip install Paramiko paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。 使用paramiko可以很好的解决以下问题: 需要使用windows客户端, 远程连接到Linux服务器,查看上面的日志状态,批量配置远程服务器,文件上传,文件下载等 "paramiko" is a combination of the esperanto words for "paranoid" and "friend".  it's a module for python 2.5+ that implements the SSH2 protocol for secure (encrypted and authenticated) connections to remote machines. unlike SSL (aka TLS), SSH2 protocol does not require hierarchical certificates signed by a powerful central authority. you may know SSH2 as the protocol that replaced telnet and rsh for secure access to remote shells, but the protocol also includes the ability to open arbitrary channels to remote services across the encrypted tunnel (this is how sftp works, for example). it is written entirely in python (no C or platform-dependent code) and is released under the GNU LGPL (lesser GPL). the package and its API is fairly well documented in the "doc/" folder that should have come with this archive. Requirements ------------  - python 2.5 or better <http://www.python.org/>  - pycrypto 2.1 or better <https://www.dlitz.net/software/pycrypto/> If you have setuptools, you can build and install paramiko and all its dependencies with this command (as root)::    easy_install ./ Portability ----------- i code and test this library on Linux and MacOS X. for that reason, i'm pretty sure that it works for all posix platforms, including MacOS. it should also work on Windows, though i don't test it as frequently there. if you run into Windows problems, send me a patch: portability is important to me. some python distributions don't include the utf-8 string encodings, for reasons of space (misdirected as that is). if your distribution is missing encodings, you'll see an error like this::    LookupError: no codec search functions registered: can't find encoding this means you need to copy string encodings over from a working system. (it probably only happens on embedded systems, not normal python installs.) Valeriy Pogrebitskiy says th
py3study
2020/01/08
1.2K0
java FTP同步工具
public class FtpGetD { private FTPClient ftpClient ; public FtpGetD() { this.ftpClient = new FTPClient(); } /** * 功能说明:通过递归实现 ftp目录文件与本地文件同步更新 * * @param ftpfilepath *
葫芦
2019/04/17
2.5K0
python paramiko 问题总结
SSHClient is the main class provided by the paramkio module. It provides the basic interface you are going to want to use to instantiate server connections. The above code creates a new SSHClient object, and then calls ”connect()” to connect us to the local SSH server.
py3study
2020/01/06
9160
JAVA操作FTP(FTP工具类)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133224.html原文链接:https://javaforall.cn
全栈程序员站长
2022/06/27
8.8K0
Java 上传文件到ftp服务器「建议收藏」
前两篇文章我们搭建了一个ftp服务器,并对服务器进行了相应的配置,这篇文章我们来说一下我们如何上传文件。
全栈程序员站长
2022/10/03
3.8K0
Java 上传文件到ftp服务器「建议收藏」
python sftp
http://kaifly.blog.51cto.com/3209616/1832200
py3study
2020/01/10
3.1K0
python ftp常用操作
原来直接在shell下操作:需要【连接,输用户名,输密码,单文件操作,存在超时限制】
py3study
2020/01/10
6640
python 运行nmon使用说明
第一步: 安装:paramiko window安装方法:pip install paramiko
py3study
2020/01/06
1.4K0
python 下载FTP服务器所有文件 封装类
import os, sys, ftplib from getpass import getpass from mimetypes import guess_type, add_type
用户5760343
2022/05/13
1.2K0
相关推荐
python paramiko
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验