運維打鐵: 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
英文地址,請注明出處:http://en.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%…