Python运维自动化核心是理清连接、配置、日志、状态四件事:用paramiko/fabric3实现批量命令与文件分发,YAML管理主机配置,logging统一日志,SQLite/cron+锁文件做状态追踪。

Python 是系统运维自动化的重要工具,尤其适合批量操作和脚本管理。关键不在于写多复杂的代码,而在于用对模块、理清流程、做好异常控制和结果反馈。
批量执行远程命令:paramiko + 并发控制
用 paramiko 可以安全地通过 SSH 批量登录服务器执行命令。但直接 for 循环串行执行效率低,建议配合 threading 或 concurrent.futures 提升并发度。
- 先用配置文件(如 YAML)管理主机列表、用户、密钥路径或密码
- 每个连接单独建立,执行完立即 close,避免连接堆积
- 捕获 AuthenticationException、SSHException 等常见异常,记录失败主机和原因
- 命令输出建议统一结构化返回(如字典:{"host": "10.0.1.5", "status": "success", "output": "..."})
批量文件分发与同步:fabric3 或 scp + subprocess
fabric3(Python 3 兼容版 fabric)封装了 SSH 和 SFTP 操作,适合上传、下载、远程运行脚本等场景。若仅需简单分发,也可用 subprocess 调用系统 scp 命令,更轻量。
- fabric3 的 Connection 对象支持 run()、put()、get() 方法,可链式调用
- 大文件分发前建议校验 md5sum,put() 后在远端执行校验并返回结果
- 避免在远程直接覆盖关键配置文件,可先备份为 .bak 再更新
- 使用 sudo=True 时注意密码输入方式(env.password / env.key_filename / invoke Responder)
运维脚本统一管理:入口+配置+日志三件套
单个脚本好维护,多个脚本混在一起就容易混乱。推荐按“主入口脚本 + 配置目录 + 日志模块”组织结构。
立即学习“Python免费学习笔记(深入)”;
- 主脚本(如 ops_runner.py)只负责解析参数(argparse)、加载配置、调度子模块
- 配置分离成 conf/ 目录,支持环境区分(dev.yaml / prod.yaml),用 PyYAML 加载
- 日志统一用 logging 配置:按天轮转、记录到文件、同时输出到终端、带 host 和 task 标签
- 每个功能封装为独立函数或类(如 BackupManager、ServiceChecker),便于单元测试和复用
定时任务与状态追踪:结合 cron + 状态文件或 SQLite
自动化脚本常需周期性运行,但单纯丢进 crontab 容易失控。建议增加轻量状态追踪机制。
- 每次运行前检查上一次是否完成(通过锁文件或数据库中的 status 字段)
- 关键步骤写入 SQLite(轻量、无需服务、支持事务),例如记录“nginx_restart_20240520”执行时间与结果
- cron 中调用 Python 脚本时加超时控制(timeout 300 /usr/bin/python3 /opt/ops/check_disk.py)
- 失败时自动触发邮件或企业微信通知(可用 smtplib 或 requests 调用 webhook)
不复杂但容易忽略。把连接、配置、日志、状态四件事理清楚,批量运维脚本就能稳定跑起来。










