Python实现日志备份守护进程的示例

作者:

文章目录
  • 假设你是一名运维工程师,需要为公司的监控系统开发一个简单的日志备份守护进程。该进程需满足以下需求: 后台运行:脱离终端,长期监控指定目录(如 /var/log/app/)中的日志文件。 自动备份:每隔 5 分钟将新增的日志文件压缩备份到 /backup/logs/ 目录。 日志记录:记录守护进程自身的操作日志到 /var/log/backup_daemon.log。 系统服务化:通过 systemd 管理进程的启动、停止和状态查看。
  • 操作系统:Ubuntu/CentOS 等主流 Linux 发行版 Python 版本:Python 3.x 依赖安装: # 确保已安装 Python3 和 pip sudo apt install python3 python3-pip # Ubuntu sudo yum install python3 python3-pip # CentOS
  • 通过本案例,您将掌握: 使用 Python 实现守护进程逻辑(无需手动 fork())。 通过 systemd 管理 Python 脚本的后台运行。 利用 Python 的 logging 模块记录操作日志。
  • Python 优势: 无需处理底层 fork() 和 setsid(),代码更简洁。 使用 subprocess 模块可轻松调用系统命令(如 tar)。 systemd 管理: 通过 Type=simple 直接运行前台程序,systemd 自动守护化。 日志可通过 journalctl 统一查看。 日志记录: Python 内置 logging 模块提供灵活的日志管理。
  • 增量备份:记录已备份的文件名或时间戳,避免重复压缩。 异常处理:增加 try/except 捕获文件操作异常。 配置文件:使用 configparser 模块管理路径、间隔时间等参数。 到此这篇关于Python实现日志备份守护进程的示例的文章就介绍到这了,更多相关Python 日志备份守护进程内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!  您可能感兴趣的文章: Python全栈之进程和守护进程 python 如何设置守护进程 Python 创建守护进程的示例 Python守护进程实现过程详解 python实现守护进程、守护线程、守护非守护并行 python使用fork实现守护进程的方法 Python如何实现守护进程的方法示例 python daemon守护进程实现 Python守护进程用法实例分析
  • 目录
    • 实训背景
    • 环境准备
    • 实训步骤
      • 任务1:编写 Python 守护进程代码
      • 任务2:配置 systemd 服务
      • 任务3:测试与验证
      • 任务4:管理服务
    • 实训总结
      • 知识要点
        • 扩展优化建议

          假设你是一名运维工程师,需要为公司的监控系统开发一个简单的日志备份守护进程。该进程需满足以下需求:

          • 后台运行:脱离终端,长期监控指定目录(如 /var/log/app/)中的日志文件。
          • 自动备份:每隔 5 分钟将新增的日志文件压缩备份到 /backup/logs/ 目录。
          • 日志记录:记录守护进程自身的操作日志到 /var/log/backup_daemon.log。
          • 系统服务化:通过 systemd 管理进程的启动、停止和状态查看。

          操作系统:Ubuntu/CentOS 等主流 Linux 发行版

          Python 版本:Python 3.x

          依赖安装:

          # 确保已安装 Python3 和 pip
          sudo apt install python3 python3-pip   # Ubuntu
          sudo yum install python3 python3-pip   # CentOS
          

          目标:用 Python 实现日志监控与备份逻辑,无需手动处理 fork()

          创建脚本 backup_daemon.py

          import os
          import time
          import logging
          from datetime import datetime
          import subprocess
          
          # 配置日志
          logging.basicConfig(
              filename='/var/log/backup_daemon.log',
              level=logging.INFO,
              format='%(asctime)s - %(message)s',
              datefmt='%Y-%m-%d %H:%M:%S'
          )
          
          def backup_logs():
              log_dir = '/var/log/app'
              backup_dir = '/backup/logs'
          
              # 遍历日志目录
              for root, _, files in os.walk(log_dir):
                  for file in files:
                      src_path = os.path.join(root, file)
                      dest_path = os.path.join(backup_dir, f"{file}.tar.gz")
          
                      # 检查是否已备份
                      if not os.path.exists(dest_path):
                          logging.info(f"Backing up {file}...")
                          # 使用 tar 压缩
                          try:
                              subprocess.run(
                                  ['tar', '-czf', dest_path, src_path],
                                  check=True,
                                  stdout=subprocess.DEVNULL,
                                  stderr=subprocess.DEVNULL
                              )
                          except subprocess.CalledProcessError as e:
                              logging.error(f"Failed to backup {file}: {e}")
          
          if __name__ == "__main__":
              logging.info("Daemon started.")
              while True:
                  backup_logs()
                  time.sleep(300)  # 5分钟执行一次
          

          目标:让 Python 脚本以服务形式在后台运行,无需代码内守护进程逻辑。

          创建服务文件

          sudo vim /etc/systemd/system/backup_daemon.service
          

          编写服务配置

          [Unit]
          Description=Python Log Backup Daemon
          After=network.target
          
          [Service]
          Type=simple
          ExecStart=/usr/bin/python3 /path/to/backup_daemon.py  # 修改为实际脚本路径
          Restart=on-failure
          RestartSec=5s
          User=root
          WorkingDirectory=/  # 可选:设置工作目录
          
          [Install]
          WantedBy=multi-user.target
          

          部署并启动服务

          sudo systemctl daemon-reload
          sudo systemctl start backup_daemon
          sudo systemctl enable backup_daemon
          

          生成测试日志文件

          sudo touch /var/log/app/test.log
          

          查看备份结果

          ls /backup/logs  # 5分钟后应生成 test.log.tar.gz
          

          查看守护进程日志

          tail -f /var/log/backup_daemon.log
          

          查看状态

          systemctl status backup_daemon
          

          停止服务

          sudo systemctl stop backup_daemon
          

          查看 systemd 日志

          journalctl -u backup_daemon -f  # 实时跟踪日志
          

          通过本案例,您将掌握:

          • 使用 Python 实现守护进程逻辑(无需手动 fork())。
          • 通过 systemd 管理 Python 脚本的后台运行。
          • 利用 Python 的 logging 模块记录操作日志。

          Python 优势:

          • 无需处理底层 fork() 和 setsid(),代码更简洁。
          • 使用 subprocess 模块可轻松调用系统命令(如 tar)。

          systemd 管理:

          • 通过 Type=simple 直接运行前台程序,systemd 自动守护化。
          • 日志可通过 journalctl 统一查看。

          日志记录:

          • Python 内置 logging 模块提供灵活的日志管理。

          • 增量备份:记录已备份的文件名或时间戳,避免重复压缩。
          • 异常处理:增加 try/except 捕获文件操作异常。
          • 配置文件:使用 configparser 模块管理路径、间隔时间等参数。

          到此这篇关于Python实现日志备份守护进程的示例的文章就介绍到这了,更多相关Python 日志备份守护进程内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 

          您可能感兴趣的文章:

          • Python全栈之进程和守护进程
          • python 如何设置守护进程
          • Python 创建守护进程的示例
          • Python守护进程实现过程详解
          • python实现守护进程、守护线程、守护非守护并行
          • python使用fork实现守护进程的方法
          • Python如何实现守护进程的方法示例
          • python daemon守护进程实现
          • Python守护进程用法实例分析

          站内搜索