运维打铁: Python 脚本在运维中的常用场景与实现

文章目录

    • 引言
    • 思维导图
    • 常用场景与代码实现
      • 1. 服务器监控
      • 2. 文件管理
      • 3. 网络管理
      • 4. 自动化部署
    • 总结
    • 注意事项

引言

在当今的 IT 运维领域,自动化和效率是至关重要的。Python 作为一种功能强大且易于学习的编程语言,已经成为运维人员不可或缺的工具。它可以帮助运维人员快速实现各种自动化任务,提高工作效率,减少人为错误。本文将介绍 Python 脚本在运维中的常用场景,并给出相应的代码示例。

思维导图

在这里插入图片描述

常用场景与代码实现

1. 服务器监控

服务器监控是运维工作中的重要环节,通过 Python 脚本可以实时监控服务器的 CPU、内存和磁盘 I/O 使用率。

import psutil# CPU 使用率监控
cpu_percent = psutil.cpu_percent(interval=1)
print(f"CPU 使用率: {cpu_percent}%")# 内存使用率监控
memory = psutil.virtual_memory()
memory_percent = memory.percent
print(f"内存使用率: {memory_percent}%")# 磁盘 I/O 监控
disk_io = psutil.disk_io_counters()
read_count = disk_io.read_count
write_count = disk_io.write_count
print(f"磁盘读次数: {read_count}, 磁盘写次数: {write_count}")

2. 文件管理

文件管理包括文件备份、清理和查找等操作。

import shutil
import os
import glob# 文件备份
source_file = 'example.txt'
backup_dir = 'backup'
if not os.path.exists(backup_dir):os.makedirs(backup_dir)
shutil.copy2(source_file, os.path.join(backup_dir, source_file))
print(f"文件 {source_file} 已备份到 {backup_dir}")# 文件清理
old_files = glob.glob('*.log')
for file in old_files:os.remove(file)
print("旧日志文件已清理")# 文件查找
search_pattern = '*.py'
matching_files = glob.glob(search_pattern)
print(f"找到的 Python 文件: {matching_files}")

3. 网络管理

网络管理涉及端口扫描、IP 地址验证和网络连通性测试等。

import socket
import ipaddress# 端口扫描
def port_scan(ip, port):try:sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(1)result = sock.connect_ex((ip, port))if result == 0:print(f"端口 {port} 开放")else:print(f"端口 {port} 关闭")sock.close()except socket.error as e:print(f"发生错误: {e}")ip = '127.0.0.1'
port = 80
port_scan(ip, port)# IP 地址验证
def validate_ip(ip):try:ipaddress.ip_address(ip)print(f"{ip} 是有效的 IP 地址")except ValueError:print(f"{ip} 不是有效的 IP 地址")test_ip = '192.168.1.1'
validate_ip(test_ip)# 网络连通性测试
import subprocess
def ping(host):try:result = subprocess.run(['ping', '-c', '1', host], stdout=subprocess.PIPE, stderr=subprocess.PIPE)if result.returncode == 0:print(f"{host} 网络连通")else:print(f"{host} 网络不通")except Exception as e:print(f"发生错误: {e}")ping('google.com')

4. 自动化部署

自动化部署可以实现软件安装、配置文件更新和服务启动与停止等操作。

import subprocess# 软件安装
def install_package(package):try:subprocess.run(['apt-get', 'install', '-y', package], check=True)print(f"{package} 安装成功")except subprocess.CalledProcessError as e:print(f"{package} 安装失败: {e}")package_name = 'nginx'
install_package(package_name)# 配置文件更新
config_file = '/etc/nginx/nginx.conf'
new_config = 'user nobody;\nworker_processes auto;\n'
with open(config_file, 'w') as f:f.write(new_config)
print(f"{config_file} 配置文件已更新")# 服务启动与停止
def start_service(service):try:subprocess.run(['systemctl', 'start', service], check=True)print(f"{service} 服务已启动")except subprocess.CalledProcessError as e:print(f"{service} 服务启动失败: {e}")def stop_service(service):try:subprocess.run(['systemctl', 'stop', service], check=True)print(f"{service} 服务已停止")except subprocess.CalledProcessError as e:print(f"{service} 服务停止失败: {e}")service_name = 'nginx'
start_service(service_name)
stop_service(service_name)

总结

Python 脚本在运维工作中具有广泛的应用场景,通过编写简单的脚本可以实现服务器监控、文件管理、网络管理和自动化部署等任务。Python 的简洁性和丰富的库使得运维人员可以快速开发出高效、可靠的自动化工具,提高运维工作的效率和质量。希望本文介绍的内容能帮助你更好地利用 Python 进行运维工作。

注意事项

  • 上述代码示例中的部分操作(如软件安装、服务启动与停止)需要在具有相应权限的环境中运行。
  • 在实际使用中,你可以根据具体需求对代码进行修改和扩展。

通过以上内容,你可以详细了解 Python 脚本在运维中的常用场景和实现方法,并根据思维导图对内容进行梳理和扩展。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88865.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【零基础入门unity游戏开发——unity3D篇】3D光源之——unity反射和反射探针技术

文章目录 前言实现天空盒反射1、新建一个cube2、全反射材质3、增加环境反射分辨率反射探针1、一样把小球材质调成全反射2、在小球身上加添加反射探针3、设置静态物体4、点击烘培5、效果6、可以修改反射探针区域大小7、实时反射专栏推荐完结前言 当对象收到直接和间接光照后,它…

React Three Fiber 实现 3D 模型点击高亮交互的核心技巧

在 WebGL 3D 开发中,模型交互是提升用户体验的关键功能之一。本文将基于 React Three Fiber(R3F)和 Three.js,总结 3D 模型点击高亮(包括模型本身和边框)的核心技术技巧,帮助开发者快速掌握复杂…

卷积神经网络实战:MNIST手写数字识别

夜渐深,我还在😘 老地方 睡觉了🙌 文章目录📚 卷积神经网络实战:MNIST手写数字识别🧠 4.1 预备知识⚙️ 4.1.1 torch.nn.Conv2d() 三维卷积操作📏 4.1.2 nn.MaxPool2d() 池化层的作用&#x1f4…

HarmonyOS应用无响应(AppFreeze)深度解析:从检测原理到问题定位

HarmonyOS应用无响应(AppFreeze)深度解析:从检测原理到问题定位 在日常应用使用中,我们常会遇到点击无反应、界面卡顿甚至完全卡死的情况——这些都可能是应用无响应(AppFreeze) 导致的。对于开发者而言&am…

湖北设立100亿元人形机器人产业投资母基金

湖北设立100亿元人形机器人产业投资母基金 湖北工信 2025年07月08日 12:03 湖北 ,时长01:20 近日,湖北设立100亿元人形机器人产业投资母基金,重点支持人形机器人和人工智能相关产业发展。 人形机器人产业投资母基金由湖北省财政厅依托省政府…

时序预测 | Pytorch实现CNN-LSTM-KAN电力负荷时间序列预测模型

预测效果 代码主要功能 该代码实现了一个结合CNN(卷积神经网络)、LSTM(长短期记忆网络)和KAN(Kolmogorov-Arnold Network)的混合模型,用于时间序列预测任务。主要流程包括: 数据加…

OCR 识别:车牌识别相机的 “火眼金睛”

车牌识别相机在交通管理、停车场收费等场景中,需快速准确识别车牌信息。但实际环境中,车牌可能存在污渍、磨损、光照不均等情况,传统识别方式易出现误读、漏读。OCR 技术让车牌识别相机如虎添翼。它能精准提取车牌上的字符,不管是…

Java面试基础:面向对象(2)

1. 接口里可以定义哪些方法抽象方法:抽象方法是接口的核心部分,所有实现接口的类都必须实现这些方法。抽象方法默认是 public 和 abstract 修饰,这些修饰符可以省略。public interface Animal {void Sound(); }默认方法:默认方法是…

有哪些更加简洁的for循环?循环语句?

目录 简洁的for循环 循环过程修改循环变量 循环语句 不同编程语言支持的循环语句 foreach 无限循环 for循环历史 break和continue 循环判断结束值 循环标签 循环语句优化 循环表达式返回值 简洁的for循环 如果需要快速枚举一个集合的元素,尽管C语言可以…

RK3568/3588 Android 12 源码默认使用蓝牙mic录音

遇到客户一个需求,如果连接了带mic的蓝牙耳机,默认所有的录音要走蓝牙mic通道。这个功能搞了好久,终于搞定了。1. 向RK寻求帮助,先打通 bt sco能力。此时,还无法默认就切换到蓝牙 mic通道,接下来我们需求默…

解锁HTTP:从理论到实战的奇妙之旅

目录一、HTTP 协议基础入门1.1 HTTP 协议是什么1.2 HTTP 协议的特点1.3 HTTP 请求与响应的结构二、HTTP 应用场景大揭秘2.1 网页浏览2.2 API 调用2.3 文件传输2.4 内容分发网络(CDN)2.5 流媒体服务三、HTTP 应用实例深度剖析3.1 使用 JavaScript 的 fetc…

uvm_config_db examples

通过uvm_config_db类访问的UVM配置数据库,是在多个测试平台组件之间传递不同对象的绝佳方式。 methods 有两个主要函数用于从数据库中放入和检索项目,分别是 set() 和 get()。 static function void set ( uvm_component cntxt,string inst_name,string …

(C++)任务管理系统(文件存储)(正式版)(迭代器)(list列表基础教程)(STL基础知识)

目录 前言: 源代码: 代码解析: 一.头文件和命名空间 1. #include - 输入输出功能2. #include - 链表容器3. #include - 字符串处理4. using namespace std; - 命名空间 可视化比喻:建造房子 🏠 二.menu()函数 …

Java 中的异步编程详解

前言 在现代软件开发中,异步编程(Asynchronous Programming) 已经成为构建高性能、高并发应用程序的关键技术之一。Java 作为一门广泛应用于后端服务开发的语言,在其发展过程中不断引入和优化异步编程的支持。从最初的 Thread 和…

MySQL逻辑删除与唯一索引冲突解决

问题背景 在MySQL数据库设计中,逻辑删除(软删除)是一种常见的实践,它通过设置标志位(如is_delete)来标记记录被"删除",而不是实际删除数据。然而,当表中存在唯一约束时&am…

php命名空间用正斜杠还是反斜杠?

在PHP中,命名空间使用反斜杠(\)作为分隔符,这是PHP语言规范明确规定的。反斜杠在命名空间中扮演路径分隔的角色,用于区分不同层级的命名空间。 具体说明:语法规则 PHP命名空间使用反斜杠(\&…

《从依赖纠缠到接口协作:ASP.NET Core注入式开发指南》

在C#的ASP.NET Core开发中,依赖注入绝非简单的技术技巧,而是重构代码关系的底层逻辑。它像一套隐形的神经网络,让程序模块摆脱硬编码的束缚,在运行时实现动态连接,从而为系统注入可测试、可进化的核心生命力。理解其深…

星云ERP本地环境搭建笔记

看到星云ERP两个比较实用的功能,编号规则和打印模板,如下图所示,于是本地跑起来学习学习。开发环境必备:1. JDK 1.82. MySQL 5.73. Redis 44. RabbitMQ 3.12.45. nodejs 206. pnpm 9.7.1 (npm install -g pnpm9.7.1)其他开发工具&…

RedisJSON 的 `JSON.ARRAPPEND`一行命令让数组动态生长

1 、 为什么选择 JSON.ARRAPPEND 在传统的键值模型里,若要往数组尾部追加元素,通常需要 取→改→写 三步: GET 整个 JSON;在应用层把元素 push 进数组;SET 回 Redis。 一条 JSON.ARRAPPEND 则可一次完成,具…

14:00开始面试,14:08就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到4月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…