2026年运维自动化实战:高效Shell与Python脚本分享
2026年运维自动化实战:高效Shell与Python脚本分享
进入2026年,随着云原生架构与混合云的全面普及,运维工作早已从早期的“刀耕火种”演进到高度智能化的自动化阶段。尽管AIOps和大模型在运维诊断中发挥了越来越大的作用,但在日常的基础设施管理、批量化任务执行和底层资源调度中,轻量级的Shell与Python脚本依然是运维工程师不可或缺的“瑞士军刀”。
在2026年的今天,系统的复杂度和规模呈指数级增长,单纯依靠手工敲击命令不仅效率低下,而且极易引发人为故障。本文将分享三个在2026年运维日常中极为实用的自动化脚本,涵盖容器维护、资源监控与安全巡检三大核心场景,希望能为同行们提供一些借鉴。
一、 Shell脚本:Docker系统级垃圾回收与日志清理
在2026年,容器化部署已是绝对的主流。然而,随着业务高频迭代,Docker节点上往往会堆积大量已停止的容器、悬挂镜像(dangling images)以及极度占用磁盘的无用日志。以下这个Shell脚本可以安全地回收这些垃圾资源,保障宿主机磁盘健康。
#!/bin/bash
# 2026年Docker系统级垃圾回收脚本
# 用法: ./docker_gc.sh
LOG_FILE="/var/log/docker_gc_2026.log"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始执行Docker垃圾回收..." | tee -a $LOG_FILE
# 1. 清理未使用的容器卷、网络和悬挂镜像
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 正在清理未使用的Docker资源..." | tee -a $LOG_FILE
docker system prune -af --volumes | tee -a $LOG_FILE
# 2. 清理过大的容器日志(保留最后1000行)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] 正在截断容器日志..." | tee -a $LOG_FILE
LOG_DIR="/var/lib/docker/containers"
for log_file in $(find $LOG_DIR -name "*-json.log" -type f -size +500M); do
echo "截断大日志文件: $log_file" | tee -a $LOG_FILE
tail -n 1000 "$log_file" > "${log_file}.tmp" && mv "${log_file}.tmp" "$log_file"
done
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Docker垃圾回收执行完毕。" | tee -a $LOG_FILE
脚本解析: 该脚本首先利用docker system prune强制清理所有未被引用的资源,随后针对超过500MB的容器JSON日志文件进行截断保留。建议通过2026年主流的systemd timer或crontab配置为每周执行一次,有效防止磁盘被打爆。
二、 Python脚本:跨云主机资源监控与飞书告警
2026年的混合云环境要求运维人员具备跨平台监控能力。相比于Shell,Python在处理API调用、JSON解析和复杂逻辑时更具优势。以下Python脚本利用psutil库采集系统指标,并在CPU或内存超载时,通过飞书Webhook发送告警。
#!/usr/bin/env python3
# 2026年跨云主机资源监控脚本
import psutil
import requests
import datetime
# 2026年阈值配置
CPU_THRESHOLD = 85.0 # CPU使用率告警阈值(%)
MEM_THRESHOLD = 90.0 # 内存使用率告警阈值(%)
FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/your_2026_webhook_token"
def send_feishu_alert(message):
headers = {'Content-Type': 'application/json'}
payload = {
"msg_type": "text",
"content": {
"text": f"【2026运维告警】\n时间: {datetime.datetime.now()}\n主机: {psutil.net_hostname()}\n详情: {message}"
}
}
try:
requests.post(FEISHU_WEBHOOK, json=payload, headers=headers, timeout=5)
except Exception as e:
print(f"告警发送失败: {e}")
def check_resources():
cpu_usage = psutil.cpu_percent(interval=3)
mem_info = psutil.virtual_memory()
alert_msgs = []
if cpu_usage > CPU_THRESHOLD:
alert_msgs.append(f"CPU使用率过高: {cpu_usage}%")
if mem_info.percent > MEM_THRESHOLD:
alert_msgs.append(f"内存使用率过高: {mem_info.percent}%")
if alert_msgs:
send_feishu_alert("\n".join(alert_msgs))
print("已触发告警")
else:
print("系统资源正常")
if __name__ == "__main__":
check_resources()
脚本解析: 脚本通过psutil获取实时的CPU和内存数据,一旦突破设定的85%和90%红线,立即构造报文向指定的飞书机器人发送告警。在2026年,这种轻量级的旁路监控作为Prometheus等大型监控系统的补充,依然非常有效,尤其适合部署在边缘计算节点上。
三、 Python脚本:多域名SSL证书到期自动化巡检
随着HTTPS的全面普及及合规要求的日益严格,SSL证书到期导致业务中断是运维的低级失误。在2026年,手动检查数十甚至上百个域名的证书有效期已不现实。此脚本可批量扫描域名证书,并在到期前30天发出预警。
#!/usr/bin/env python3
# 2026年SSL证书到期批量巡检脚本
import ssl
import socket
import datetime
# 预警天数
DAYS_BEFORE_EXPIRE = 30
# 待检查域名列表
DOMAINS = [
("api.service1.com", 443),
("portal.service2.com", 443),
("cdn.service3.com", 443)
]
def check_ssl_expiry(domain, port):
context = ssl.create_default_context()
try:
with socket.create_connection((domain, port), timeout=5) as sock:
with context.wrap_socket(sock, server_hostname=domain) as ssock:
cert = ssock.getpeercert()
# 解析证书到期时间
expire_date_str = cert['notAfter']
expire_date = datetime.datetime.strptime(expire_date_str, "%b %d %H:%M:%S %Y %Z")
remaining_days = (expire_date - datetime.datetime.utcnow()).days
if remaining_days <= DAYS_BEFORE_EXPIRE:
print(f"[告警] {domain} 证书将在 {remaining_days} 天后过期 (到期日: {expire_date})")
# 此处可接入企业微信/钉钉/飞书告警API
else:
print(f"[正常] {domain} 证书剩余 {remaining_days} 天")
except Exception as e:
print(f"[错误] 检查 {domain} 时发生异常: {e}")
if __name__ == "__main__":
print(f"--- 2026年SSL证书巡检启动 {datetime.datetime.now()} ---")
for d, p in DOMAINS: