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: