当前位置: 首页 > news >正文

Python自动化运维:一键掌控服务器的高效之道

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门!

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界

在互联网和云计算高速发展的今天,服务器数量的指数增长使得手动运维和管理变得异常繁琐。Python凭借其强大的可读性和丰富的生态系统,成为实现自动化运维的理想语言。本文以“Python自动化运维:编写自动化脚本进行服务器管理”为主题,深入探讨了如何利用Python在批量处理、定时任务和日志清理等方面解放运维人员的双手。文章从SSH连接、批量部署脚本到日志归档、自动化报警等多个角度进行了详细阐述与代码示例,并分享了常见的最佳实践和性能优化思路。通过阅读本文,读者可以快速掌握Python自动化运维的核心技能,进一步提升运维效率与系统稳定性。


引言

在服务器数量较少的时候,运维人员往往可以手动登录每台服务器,执行更新、重启、日志查看等操作。然而,随着业务的快速扩张以及云计算、容器化技术的普及,服务器规模迅速增大,手动操作带来的效率问题、出错风险、可重复性低等缺点变得非常突出。为了满足大规模集群管理的需求,自动化运维成为越来越多企业的必然选择。

Python在自动化运维领域优势明显:

  1. 语法简洁:低门槛、易上手,有利于快速编写脚本。
  2. 生态完善:拥有丰富的第三方库,如Paramiko、Fabric、psutil等,为远程连接、资源监控、批量操作提供便利。
  3. 可扩展性强:可以与其他编程语言或系统工具结合,构建灵活的运维平台。

在本篇文章中,我们将围绕“Python自动化运维:编写自动化脚本进行服务器管理”这一主题,系统介绍如何借助Python进行批量操作、定时任务和日志清理等自动化运维任务。文章不仅会给出大量的示例代码,还会对每段代码进行详尽的中文注释和解释,以帮助读者更好地掌握Python自动化运维的相关技术,并在实际生产环境中得以落地实施。

提示:如果您对并发编程、网络协议或系统管理有一定的了解,将更有助于理解本篇内容;但即使是初学者,也能通过示例代码和详细解说,逐步掌握自动化运维脚本的编写方法。


一、Python在运维自动化中的角色

在企业日常运维工作中,常见的自动化需求包括:

  1. 批量操作:例如同时对多台服务器安装软件、更新配置文件或执行重启操作。
  2. 定时任务:使用脚本替代手动排查和处理,如定期清理日志、备份数据等。
  3. 监控和报警:获取CPU、内存等资源使用情况,或者收集异常日志后发送报警通知。
  4. 日志管理:定期清理过期日志并将重要日志进行归档或备份。
  5. 自动化部署:在持续集成和持续交付(CI/CD)流程中,实现一键部署和回滚。

Python可以通过第三方库或原生功能,轻松完成以上任务,并且可扩展为一整套自动化运维平台。例如,通过ParamikoFabric库实现SSH远程操作,通过crontabschedule库实现定时任务,通过logging模块实现日志的管理与归档,配合psutil库监控系统资源等。


二、批量处理:提升大规模服务器管理效率

2.1 Paramiko与Fabric:SSH自动化利器

2.1.1 Paramiko简介

Paramiko是一个纯Python实现的SSHv2协议库,支持加密与验证,可以用来远程执行命令、文件上传下载等。使用Paramiko时,典型的流程如下:

  • 创建SSHClient对象
  • 设置自定义的服务器主机密钥策略
  • 调用connect方法连接到目标服务器
  • 使用exec_command执行远程命令
  • 通过标准输入/输出通道获取执行结果
  • 关闭连接

以下是一个使用Paramiko连接到远程服务器并执行命令的示例脚本:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import paramikodef execute_remote_command(host, port, username, password, command):"""在远程服务器上执行命令并返回输出结果:param host: 服务器IP或域名:param port: SSH端口,一般为22:param username: 登录用户名:param password: 登录密码:param command: 要执行的命令:return: 执行结果字符串"""# 创建SSHClient对象ssh_client = paramiko.SSHClient()# 自动添加目标服务器的主机密钥(不安全,仅供测试使用)ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh_client.connect(hostname=host, port=port, username=username, password=password)# 执行命令stdin, stdout, stderr = ssh_client.exec_command(command)# 获取执行结果result_out = stdout.read().decode('utf-8')result_err = stderr.read().decode('utf-8')# 关闭连接ssh_client.close()if result_err:return f"Error: {result_err}"else:return result_outif __name__ == "__main__":# 测试连接host = "192.168.0.100"port = 22username = "root"password = "123456"command = "uname -a"  # 查看操作系统信息output = execute_remote_command(host, port, username, password, command)print("远程执行结果:\n", output)
代码解释
  1. Paramiko库的使用:先创建SSHClient对象,然后使用set_missing_host_key_policy设置为自动添加服务器指纹。
  2. 连接服务器:通过connect方法传入服务器IP、端口、用户名和密码。
  3. 命令执行:使用exec_command,可获取标准输入、标准输出和标准错误。
  4. 结果处理:将输出和错误消息分别读取并转换为UTF-8字符串。
  5. 连接关闭:操作完成后调用close,释放连接资源。
2.1.2 Fabric简介

Fabric基于Paramiko开发,简化了多服务器批量操作的流程,尤其适用于自动化部署和批量命令执行。它提供了更高层次的API,例如fab命令行工具,可以在fabfile.py中定义一系列任务,然后在命令行中通过fab 任务名执行。下面展示一个简单的Fabric示例,用于批量获取服务器的操作系统信息。

先安装Fabric:

pip install fabric==2.6.0

注意:Fabric 2.x和1.x版本API差异较大,示例基于2.x版本。

在项目目录下创建fabfile.py,示例如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-from fabric import Connection# 定义服务器列表
servers = [{"host": "192.168.0.101", "user": "root", "connect_kwargs": {"password": "123456"}},{"host": "192.168.0.102", "user": "root", "connect_kwargs": {"password": "123456"}},
]def get_os_info():"""获取服务器操作系统信息"""for srv in servers:# 创建连接conn = Connection(**srv)print(f"连接到服务器: {srv['host']}")result = conn.run("uname -a", hide=True)print(f"操作系统信息: {result.stdout.strip()}")conn.close()

然后在命令行中执行:

fab get_os_info
代码解释
  1. 服务器列表:定义一个Python列表,存储多台服务器的连接信息,包括主机名、用户及密码。
  2. Connection对象:Fabric提供了Connection对象,用于建立SSH会话。
  3. 批量执行:循环服务器列表,每次创建Connection,执行命令并打印结果。
  4. 关闭连接:完成操作后调用close,避免资源泄漏。

无论是Paramiko还是Fabric,都能极大地方便批量处理任务。后文中,我们还会进一步结合定时任务与日志管理进行综合示例。


2.2 并发批量处理

在大规模集群环境下,依次连接每台服务器的方式效率不高。为提高批量处理速度,可以使用并发或多线程方式,同时连接多台服务器并执行操作。

以下示例基于paramiko和Python的ThreadPoolExecutor实现多线程并发批量管理:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-import paramiko
import concurrent.futuresdef execute_command(host, username, password, command):"""在单台服务器上执行命令"""ssh_client = paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname=host, port=22, username=username, password=password)stdin, stdout, stderr = ssh_client.exec_command(command)result_out = stdout.read().decode('utf-8')result_err = stderr.read().decode('utf-8'

相关文章:

Python自动化运维:一键掌控服务器的高效之道

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在互联网和云计算高速发展的今天,服务器数量的指数增长使得手动运维和管理变得异常繁琐。Python凭借其强大的可读性和丰富的生态系统,成为…...

数论问题61一一各种进位制

10进位制是普遍使用的数进位制,二进位制是计算机采用的进位制。还有三进位制,四进位制,…等等。那一种进位制都能转化为10进位制。下面介绍这种方法。 ①10进位制的表示(口诀:逢10进1) 如8X10007X1005x1038753。 ②2进位制的表示(口诀:逢2…...

Java开发提速秘籍:巧用Apache Commons Lang工具库

一、Java 开发效率之困 在当今数字化时代,Java 作为一门广泛应用的编程语言,在各类软件开发项目中占据着举足轻重的地位。无论是大型企业级应用、互联网平台,还是移动应用后端,都能看到 Java 的身影。然而,Java 开发者…...

使用sql查询excel内容

1. 简介 我们在前面的文章中提到了calcite支持csv和json文件的数据源适配, 其实就是将文件解析成表然后以文件夹为schema, 然后将生成的schema注册到RootSehema(RootSchema是所有数据源schema的parent,多个不同数据源schema可以挂在同一个RootSchema下)下, 最终使用…...

[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令

[Python学习日记-78] 基于 TCP 的 socket 开发项目 —— 模拟 SSH 远程执行命令 简介 项目分析 如何执行系统命令并拿到结果 代码实现 简介 在Python学习日记-77中我们介绍了 socket 基于 TCP 和基于 UDP 的套接字,还实现了服务器端和客户端的通信,本…...

电子应用设计方案101:智能家庭AI喝水杯系统设计

智能家庭 AI 喝水杯系统设计 一、引言 智能家庭 AI 喝水杯系统旨在为用户提供个性化的饮水提醒和健康管理服务,帮助用户养成良好的饮水习惯。 二、系统概述 1. 系统目标 - 精确监测饮水量和饮水频率。 - 根据用户的身体状况和活动量,智能制定饮水计划。…...

vue学习路线

以下是一个详细的Vue学习路线: 一、基础入门 (一)环境搭建 1. 安装Node.js和npm:Vue项目依赖于Node.js环境,需从官网下载并安装最新版本的Node.js,npm会随Node.js一起安装。 2. 安装Vue CLI:V…...

(15)Chainlink Automation(定时任务) 详细介绍及用法

Chainlink Automation 详细介绍 1. 什么是 Chainlink Automation? Chainlink Automation 是 Chainlink 提供的一个去中心化服务,专门用于自动化执行智能合约的链上操作。它允许开发者基于时间或特定条件(如链上或链下事件)触发智…...

从入门到精通:RabbitMQ的深度探索与实战应用

目录 一、RabbitMQ 初相识 二、基础概念速览 (一)消息队列是什么 (二)RabbitMQ 核心组件 三、RabbitMQ 基本使用 (一)安装与环境搭建 (二)简单示例 (三)…...

基于微信小程序高校订餐系统的设计与开发ssm+论文源码调试讲解

第4章 系统设计 一个成功设计的系统在内容上必定是丰富的,在系统外观或系统功能上必定是对用户友好的。所以为了提升系统的价值,吸引更多的访问者访问系统,以及让来访用户可以花费更多时间停留在系统上,则表明该系统设计得比较专…...

【vitePress】基于github快速添加评论功能(giscus)

一.添加评论插件 使用giscus来做vitepress 的评论模块,使用也非常的简单,具体可以参考:giscus 文档,首先安装giscus npm i giscus/vue 二.giscus操作 打开giscus 文档,如下图所示,填入你的 github 用户…...

PID 控制算法(二):C 语言实现与应用

在本文中,我们将用 C 语言实现一个简单的 PID 控制器,并通过一个示例来演示如何使用 PID 控制算法来调整系统的状态(如温度、速度等)。同时,我们也会解释每个控制参数如何影响系统的表现。 什么是 PID 控制器&#xf…...

Git本地搭建

Git本地搭建 (项目突然不给创建仓库了,为了方便管理项目只能自己本地搭建git服务) 为了在本地搭建Git环境并实现基本的Git操作,步骤如下: 安装Git软件 ‌Windows‌:从Git官方网站下载并安装适用于Windows…...

ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果

前言 ORB-SLAM2源码学习:Initializer.cc⑦: Initializer::Triangulate特征点对的三角化_cv::svd::compute-CSDN博客 经过上面的三角化我们成功得到了三维点,但是经过三角化成功的三维点并不一定是有效的,需要筛选才能作为初始化地图点。 …...

leetcode 2239. 找到最接近 0 的数字

题目&#xff1a;2239. 找到最接近 0 的数字 - 力扣&#xff08;LeetCode&#xff09; 加班用手机刷水题&#xff0c;补个记录 1 class Solution { public:int findClosestNumber(vector<int>& nums) {int ret nums[0];for (int i 1; i < nums.size(); i) {if…...

Rust实现内网穿透工具:从原理到实现

目录 1.前言2.内网穿透原理3.丐版实现3.1 share3.2 server3.3 client3.4 测试4.项目优化4.1 工作空间4.2 代码合并4.3 无锁优化4.4 数据分离4.5 错误处理4.6 测试代码4.7 参数解析本篇原文为:Rust实现内网穿透工具:从原理到实现 更多C++进阶、rust、python、逆向等等教程,可…...

【深度学习】1.深度学习解决问题与应用领域

深度学习要解决的问题 一、图像识别相关问题 物体识别 背景和意义&#xff1a;在众多的图像中识别出特定的物体&#xff0c;例如在安防监控领域&#xff0c;识别出画面中的人物、车辆等物体类别。在自动驾驶技术中&#xff0c;车辆需要识别出道路上的行人、交通标志、其他车辆…...

文档解析:PDF里的复杂表格、少线表格如何还原?

PDF中的复杂表格或少线表格还原通常需要借助专业的工具或在线服务&#xff0c;以下是一些可行的方法&#xff1a; 方法一&#xff1a;使用在线PDF转换工具 方法二&#xff1a;使用桌面PDF编辑软件 方法三&#xff1a;通过OCR技术提取表格 方法四&#xff1a;手动重建表格 …...

深圳大学-计算机系统(3)-实验三取指和指令译码设计

实验目标 设计完成一个连续取指令并进行指令译码的电路&#xff0c;从而掌握设计简单数据通路的基本方法。 实验内容 本实验分成三周&#xff08;三次&#xff09;完成&#xff1a;1&#xff09;首先完成一个译码器&#xff08;30分&#xff09;&#xff1b;2&#xff09;接…...

Java Swing 编程全面解析:从 AWT 到 Swing 的进化之路

目录 前言 一、AWT 简介 1. 什么是 AWT&#xff1f; 2. AWT 的基本组件 3. AWT 编程示例 二、Swing 的诞生与进化 1. Swing 的特点 2. Swing 和 AWT 的主要区别 3. Swing 的基本组件 三、Swing 编程的基础示例 四、Swing 的高级功能 1. 布局管理器 2. 事件监听 3…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...