Awesome Sysadmin运维自动化脚本:Python实战案例
在日常运维工作中,系统管理员(System Administrator,简称Sysadmin)常常需要处理大量重复性任务,如服务器监控、日志分析、备份管理等。这些任务如果手动完成,不仅效率低下,还容易出错。借助Python脚本实现自动化,能显著提升工作效率,降低人为错误风险。本文将以Awesome Sysadmin项目中的实战案例为基础,介绍如何编写实用的运维自动化脚本。
自动化场景与痛点分析
运维工作中常见的自动化场景包括:
- 服务器状态监控与告警
- 日志收集与分析
- 文件备份与同步
- 系统资源清理(如Git分支、临时文件)
- 批量任务执行(如软件安装、配置更新)
以Git仓库管理为例,随着项目迭代,本地和远程会积累大量过时分支,手动清理不仅耗时,还可能误删重要分支。Awesome Sysadmin项目提供了git-branch-cleanup.sh脚本解决这一痛点,我们将基于此案例,演示如何用Python实现更灵活的自动化方案。
Python实现Git分支清理脚本
脚本功能设计
一个完善的Git分支清理脚本应具备以下功能:
- 检查当前目录是否为Git仓库
- 拉取远程最新代码
- 列出所有本地分支
- 保护重要分支(如main、master、dev)不被删除
- 显示待删除分支并确认
- 执行分支删除操作
- 清理远程跟踪分支
核心代码实现
以下是基于Python的Git分支清理脚本(tmp_repo/git_cleanup.py)核心逻辑:
import os
import subprocess
import sys
def is_git_repo():
"""检查当前目录是否为Git仓库"""
return os.path.isdir('.git')
def pull_latest_code():
"""拉取远程最新代码"""
print("正在拉取最新代码...")
result = subprocess.run(['git', 'pull', 'origin', 'main'], capture_output=True, text=True)
if result.returncode != 0:
print(f"拉取失败: {result.stderr}")
sys.exit(1)
def list_local_branches():
"""列出所有本地分支"""
result = subprocess.run(['git', 'branch'], capture_output=True, text=True)
branches = [line.strip() for line in result.stdout.split('\n') if line.strip()]
return branches
def get_branches_to_delete(protected_branches=None):
"""获取待删除分支列表"""
if protected_branches is None:
protected_branches = ['main', 'master', 'dev']
branches = list_local_branches()
current_branch = [b for b in branches if b.startswith('*')][0][2:]
protected_branches.append(current_branch) # 保护当前分支
to_delete = []
for branch in branches:
branch_name = branch.replace('*', '').strip()
if branch_name not in protected_branches:
to_delete.append(branch_name)
return to_delete
def delete_branches(branches):
"""删除指定分支"""
if not branches:
print("没有可清理的分支")
return
print("\n将要删除的分支:")
for branch in branches:
print(f"- {branch}")
confirm = input("\n确定要删除这些分支吗? (y/N) ")
if confirm.lower() != 'y':
print("取消删除")
return
print("\n正在删除分支...")
for branch in branches:
result = subprocess.run(['git', 'branch', '-D', branch], capture_output=True, text=True)
if result.returncode == 0:
print(f"已删除: {branch}")
else:
print(f"删除失败 {branch}: {result.stderr}")
def cleanup_remote_tracking():
"""清理远程跟踪分支"""
print("\n正在清理远程跟踪分支...")
subprocess.run(['git', 'fetch', '-p'], check=True)
print("远程跟踪分支清理完成")
def main():
if not is_git_repo():
print("错误: 当前目录不是Git仓库")
sys.exit(1)
pull_latest_code()
to_delete = get_branches_to_delete()
delete_branches(to_delete)
cleanup_remote_tracking()
print("\n分支清理完成!")
if __name__ == "__main__":
main()
脚本使用流程
使用该脚本的步骤如下:
- 将脚本保存为
git_cleanup.py - 赋予执行权限:
chmod +x git_cleanup.py - 在Git仓库目录中运行:
./git_cleanup.py
脚本执行流程如图所示:
脚本扩展与优化建议
参数化配置
为提高脚本灵活性,可通过配置文件或命令行参数自定义保护分支列表:
import argparse
def parse_args():
parser = argparse.ArgumentParser(description='Git分支清理工具')
parser.add_argument('--protected', nargs='+', help='保护分支列表')
return parser.parse_args()
if __name__ == "__main__":
args = parse_args()
protected = args.protected if args.protected else ['main', 'master', 'dev']
# 后续使用protected变量
日志记录与告警
添加日志记录功能,将操作结果保存到文件,并在出现异常时发送邮件或系统通知:
import logging
logging.basicConfig(
filename='git_cleanup.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# 操作时记录日志
logging.info(f"已删除分支: {branch}")
跨平台兼容性
使用pathlib模块处理路径,确保脚本在Windows和Linux系统都能运行:
from pathlib import Path
def is_git_repo():
return Path('.git').is_dir()
项目资源与学习路径
Awesome Sysadmin项目提供了丰富的运维自动化资源,除了Git分支清理脚本,还包括:
- 系统监控工具:可监控CPU、内存、磁盘等资源使用情况
- 日志分析脚本:快速定位系统异常信息
- 自动化部署工具:实现应用的一键部署与回滚
要深入学习运维自动化,建议参考以下资源:
- 项目README:了解项目整体架构和使用方法
- contributors_stats.txt:查看社区贡献者及其贡献统计
- git-branch-cleanup.sh:Bash版本的分支清理脚本,可对比学习不同语言实现方式
总结与展望
本文以Git分支清理为例,展示了如何用Python实现运维自动化脚本。通过Python的subprocess模块调用Git命令,结合逻辑控制和用户交互,实现了安全高效的分支管理。相比Bash脚本,Python版本具有更好的跨平台性和扩展性,适合处理更复杂的自动化任务。
未来,我们可以进一步探索:
- 集成CI/CD流程,实现分支自动清理
- 开发GUI界面,降低使用门槛
- 添加智能分析功能,优化分支管理策略
希望本文能帮助你开启运维自动化之旅,更多实用脚本和工具请关注Awesome Sysadmin项目。如果你有好的自动化方案或脚本,欢迎通过项目贡献指南参与社区建设!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



