返回顶部
首页 > 资讯 > 后端开发 > Python >利用Python实现自动化监控文件夹完成服务部署
  • 941
分享到

利用Python实现自动化监控文件夹完成服务部署

2024-04-02 19:04:59 941人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 准备2. 实战一下3. 总结大家好,我是安果! 最近在部署前端项目的时候,需要先将前端项目压缩包通过堡垒机上传到应用服务器的 /tmp 目录下,然后进入应用服务器中,使用

大家好,我是安果!

最近在部署前端项目的时候,需要先将前端项目压缩包通过堡垒机上传到应用服务器的 /tmp 目录下,然后进入应用服务器中,使用 mv 命令将压缩文件移动到 Nginx 项目设定目录,最后使用 unzip 命令解压文件,以此完成项目的部署

仔细分析,大部分操作都是重复性的动作,人工去完成这些操作会大大降低工作效率

本篇文章将介绍如何利用 python 监控文件夹,以此辅助完成服务的部署动作

1. 准备

这里要介绍一个 Python 依赖库「 watchdog 」

它可用于监控某个文件目录下的文件变化,包含:删除、修改、新增等操,每一个操作都会回调一个事件函数,我们可以在内部编写自定义的逻辑,以此满足我们的需求

# 安装依赖包
pip3 install watchdog

项目地址

2. 实战一下

首先,我们需要创建一个监听器,用于监听文件夹目录

from watchdog.observers import Observer

...
# 创建一个监听器,用来监听文件夹目录
observer = Observer()
...

然后,创建 2 个事件处理对象

PS:该对象继承于「 FileSystemEventHandler 」类

它们分别用于监听「 /tmp 」目录、「 /home/project/frontend 」目录,假设事件对象被命名为 obj1、obj2

obj1 负责监听 /tmp 目录,重写「 新建或修改 」事件方法,完成压缩文件的移动操作

from watchdog.events import *
import ntpath
import shutil
import zipfile

def get_filename(filepath):
    """
    根据文件夹目录,获取文件名称(待后缀)
    :param filepath:
    :return:
    """
    return ntpath.basename(filepath)

class FileMoveHandler(FileSystemEventHandler):
    def __init__(self):
        FileSystemEventHandler.__init__(self)

    ...

    # 文件新建
    def on_created(self, event):
        # 新建文件夹
        if event.is_directory:
            # print("directory created:{0}".fORMat(event.src_path))
            pass
        # 新建文件
        else:
            # print("file created:{0}".format(event.src_path))
            filename = get_filename(event.src_path)

            # 如果属于前端的4个项目压缩包,开始文件夹的操作
            if filename in watch_tags:
                self.start(filename)
   ...
   def on_modified(self, event):
        if event.is_directory:
            # print("directory modified:{0}".format(event.src_path))
            pass
        else:
            # print("file modified:{0}".format(event.src_path))
            filename = get_filename(event.src_path)
            if filename in watch_tags:
                self.start(filename)
    ...
        def start(self, filename):
        """
        文件处理逻辑
        :param filename:
        :return:
        """
        try:
            # 文件名不带后缀
            filename_without_suffix = filename.split(".")[0]

            # 源文件路径(压缩包文件)
            source_file_path = watch_folder + filename

            # 目标文件路径(压缩包文件)
            target_file_path = target_folder + filename

            # 目标项目文件夹(目标项目)
            target_project_path = target_folder + filename_without_suffix

            # 1、复制文件到目标文件夹
            print(f"拷贝源目录{source_file_path},目标文件夹:{target_folder}")
            # 删除目标文件夹下的压缩文件
            if os.path.exists(target_file_path):
                os.remove(target_file_path)
            # 移动文件到目标文件夹中
            shutil.move(source_file_path, target_folder)

            # 2、清空目标文件夹中内的所有文件夹(如果存在)
            # 如果不存在,新建一个文件夹
            if os.path.exists(target_project_path):
                shutil.rmtree(target_project_path, ignore_errors=True)

            print(f"项目{filename_without_suffix}移动成功!")
        except Exception as e:
            print("部署失败,错误原因:", str(e.args))

obj2 负责监听 /home/project/frontend 目录,同样重写「 新建或修改 」事件方法,完成压缩文件的解压动作

...
    def start(self, filename):
        # 文件名不带后缀
        filename_without_suffix = filename.split(".")[0]
        # 目标文件路径(压缩包文件)
        target_file_path = target_folder + filename

        # 目标项目文件夹(目标项目)
        target_project_path = target_folder + filename_without_suffix
        r = zipfile.is_zipfile(target_file_path)
        if r:
            fz = zipfile.ZipFile(target_file_path, 'r')
            for file in fz.namelist():
                fz.extract(file, target_folder)
        else:
            print('这不是一个正常的zip压缩包!')
...

接着,通过监听器启动上面两个事件的监听任务

import time
...
if __name__ == "__main__":
    # 待监听的文件夹目录
    watch_folder = "/tmp/"

    # 项目目标文件夹目录
    target_folder = "/home/project/frontend/"

    # 监听文件夹名称,即:项目压缩包名称
    watch_tags = ['proj1.zip', 'proj2.zip', 'proj3.zip', 'proj4.zip']

    # 创建一个监听器,用来监听文件夹目录
    observer = Observer()

    # 创建两个事件处理对象
    move_handler = FileMoveHandler()
    unzip_handler = FileUnzipHandler()

    # 启动监控任务
    # 参数分别是:观察者、监听目录、是否监听子目录
    observer.schedule(move_handler, watch_folder, True)
    observer.schedule(unzip_handler, target_folder, True)
    observer.start()
    try:
        while True:
            time.sleep(1)
    except KeyboardInterrupt:
        observer.stop()
    observer.join()
...

最后,我们在服务器上通过「 nohup 」命令,让文件监听程序在后台运行即可

# 在后台运行  
# 项目文件:watch_folder.py
# 日志文件:watch_folder.log
nohup python3 -u watch_folder.py > watch_folder.log 2>&1 &

# 查看日志:
cat watch_folder.log

3. 总结

通过上面的操作,每次我通过堡垒机将前端 zip 压缩项目文件上传到应用服务器的 /tmp 目录下,程序会自动进行后面的操作,自动完成应用部署

到此这篇关于利用Python实现自动化监控文件夹完成服务部署的文章就介绍到这了,更多相关Python监控文件夹内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 利用Python实现自动化监控文件夹完成服务部署

本文链接: https://lsjlt.com/news/119148.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 利用Python实现自动化监控文件夹完成服务部署
    目录1. 准备2. 实战一下3. 总结大家好,我是安果! 最近在部署前端项目的时候,需要先将前端项目压缩包通过堡垒机上传到应用服务器的 /tmp 目录下,然后进入应用服务器中,使用 ...
    99+
    2024-04-02
  • 怎么用Python实现服务部署自动化
    这篇“怎么用Python实现服务部署自动化”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么用Python实现服务部署自动化...
    99+
    2023-07-06
  • 太牛了,用Python实现服务部署自动化!
    最近在部署前端项目的时候,需要先将前端项目压缩包通过堡垒机上传到应用服务器的 /tmp 目录下,然后进入应用服务器中,使用 mv 命令将压缩文件移动到 Nginx 项目设定目录,最后使用 unzip 命令解压文件,以此完成项目的部署。仔细分...
    99+
    2023-05-14
    Python 命令
  • 如何利用Gitlab和Kubernetes实现自动化部署
    GitlabK8s自动化部署随着云计算和容器化技术的普及,企业越来越多地将应用程序部署在 Kubernetes 上。而为了更好地管理 Kubernetes 环境中的应用程序,越来越多的企业选择使用 Gitlab 和 Kubernetes 的...
    99+
    2023-10-22
  • 如何利用k8s与gitlab来实现自动化部署
    随着互联网行业的日益发展,软件开发变得越来越复杂。如何快速、高效、可靠地完成软件部署成为了开发者们需要解决的重要问题。而自动化部署正是这样一种解决方案,对于加快软件上线速度、提高部署质量有着不可替代的作用。本文将介绍如何利用k8s与gitl...
    99+
    2023-10-22
  • 怎么利用k8s与gitlab来实现自动化部署
    这篇文章主要介绍了怎么利用k8s与gitlab来实现自动化部署的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么利用k8s与gitlab来实现自动化部署文章都会有所收获,下面我们一起来看看吧。一、什么是k8s?...
    99+
    2023-07-05
  • 云服务器自动化部署怎么实现
    实现云服务器的自动化部署可以通过以下几个步骤来实现:1. 配置云服务器环境:首先需要在云平台上创建一个虚拟机实例,并配置好所需要的操...
    99+
    2023-09-16
    云服务器
  • maven实现docker自动化部署插件的使用
    构建开发项目 首先打开我们的IDEA构建一个我们的开发项目,配置如下: 接着打开我们的pom.xml修改build的配置,修改以后的代码如下: <build> ...
    99+
    2024-04-02
  • Springboot服务Docker化自动部署的实现方法
    还在手动将springboot项目打包,然后上传服务器,手动执行启动命令将项目启动吗?你out了!通过Docker配置DockerMaven插件,快速部署,一键将springboot...
    99+
    2024-04-02
  • Bash下如何利用Java API快速实现自动化部署?
    自动化部署已经成为现代软件开发中不可或缺的一部分。它可以帮助我们快速地部署、测试和发布我们的应用程序。在本文中,我们将介绍如何在Bash下利用Java API快速实现自动化部署。 首先,我们需要了解一些基本的概念。Java API是Jav...
    99+
    2023-10-27
    api django bash
  • idea使用docker插件实现一键自动化部署
    目录环境:一、 docker开启远程连接访问安装配置idea的docker插件创建项目,并配置一 、 创建项目二、 配置项目maven打包,生成镜像创建容器,项目部署到docker修...
    99+
    2024-04-02
  • 怎么在Springboot服务中实现自动化部署Docker
    怎么在Springboot服务中实现自动化部署Docker?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。微服务部署方式(1)手动部署:首先基于源码打包生成jar包(或war...
    99+
    2023-06-14
  • 微服务架构中如何实现服务的自动化部署?
    随着互联网的不断发展,应用程序规模和需求量不断扩大,如何以更快、更可靠、更灵活的方式部署和管理服务成为了一项重要的挑战。为了满足这个需求,微服务架构应运而生。与传统的单体应用不同,微服务架构将应用拆分成了一系列小而自治的服务,每个服务专注于...
    99+
    2023-05-16
    服务 微服务架构 自动化部署
  • 如何使用Python实现实时监控数组文件变化?
    在日常的编程工作中,我们经常需要监控某些文件的变化,并且在文件发生变化时能够及时作出相应的处理。在本文中,我们将介绍如何使用Python实现实时监控数组文件变化,并且通过演示代码来帮助您更好地理解。 使用Python的watchdog模...
    99+
    2023-07-05
    实时 数组 文件
  • Maven Web项目怎么使用Cargo插件实现自动化部署
    这篇文章主要讲解了“Maven Web项目怎么使用Cargo插件实现自动化部署”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Maven Web项目怎么使用Cargo插件实...
    99+
    2023-07-05
  • 利用nodejs监控文件变化并使用sftp上传到服务器
    最近在用react+express做一个自己的工具型网站(其实就是夺宝岛抢拍器) 然后因为经常要改动,而且又要放到服务器上进行测试。总是要webpack,然后手动把文件上传上去,不胜其烦,索性搜索了下,直接...
    99+
    2022-06-04
    服务器 文件 nodejs
  • MinIO服务部署,并实现开机自启动(优质文章)
    MinIO是一个高性能、高可用性、分布式对象存储服务。本文将介绍如何在Linux系统上部署MinIO服务,并实现系统开机自启动。 环境准备 在开始部署之前,我们需要准备以下环境: 一台Linux服务器...
    99+
    2023-10-23
    linux 运维 服务器 MinIO
  • 如何利用计划任务和VBS脚本实现自动WEB共享文件夹里的文件
    这篇文章主要介绍如何利用计划任务和VBS脚本实现自动WEB共享文件夹里的文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:Option Explicit On Error Resume Next '...
    99+
    2023-06-08
  • 利用Python实现自动生成图文并茂的数据分析
    目录前言1、一行命令,安装这个库2、核心代码模块导入①提前导入相关内容,并且注册字体②注册字体③生成报告前言 reportlab是Python的一个标准库,可以画图、画表格、编辑文字...
    99+
    2024-04-02
  • Maven Web项目使用Cargo插件实现自动化部署的详细步骤
    目录Maven实现Web项目部署到本地Tomcat实现Web项目远程部署到TomcatMaven 实现Web项目部署到本地Tomcat 下面介绍基于Maven使用cargo插件实现的...
    99+
    2023-02-21
    Cargo实现自动化部署 Maven Web项目自动化部署
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作