知用网
白蓝主题五 · 清爽阅读
首页  > 网络运维

运维自动化脚本编写:让重复工作自己跑起来

运维自动脚本编写:让重复工作自己跑起来

每天早上刚到工位,咖啡还没来得及泡,就得登录七八台服务器查日志、看磁盘空间、重启某个又挂掉的服务。这种事做一次还行,天天干,人都快麻木了。直到有天同事甩给我一个脚本,点一下,所有检查全搞定,还发邮件告诉我哪里有问题——那一刻我才知道,原来运维可以这么轻松。

这就是运维自动化脚本的价值。它不玄乎,就是帮你把那些“又来一遍”的操作,变成一键执行的流程。

从最简单的开始:批量检查服务器状态

比如你管理着几台Linux服务器,每次上线前都要确认它们是否在线、负载如何。手动一个个ssh进去太费劲,写个Shell脚本就能解决。

#!/bin/bash
# servers_status.sh
servers=("192.168.1.10" "192.168.1.11" "192.168.1.12")
for ip in "${servers[@]}"; do
echo "=== 检查 $ip ==="
ping -c 1 $ip > /dev/null
if [ $? -eq 0 ]; then
ssh $ip 'echo "主机: $(hostname)"; echo "时间: $(date)"; echo "负载: $(uptime)"'
else
echo "$ip 离线了!"
fi
done

把这个脚本加到crontab里,每小时跑一次,结果重定向到日志文件,问题早发现,半夜被叫醒的次数都少了。

再进一步:用Python处理复杂逻辑

Shell适合简单任务,但一旦要处理JSON、调API、发消息,Python就更顺手。比如你要自动清理日志文件,同时通知钉钉群。

import os
import requests
from datetime import datetime

def clean_logs(server, days=7):
cmd = f'find /var/log/{server} -name "*.log" -mtime +{days} -delete'
os.system(cmd)
return f"[{datetime.now()}] {server} 日志已清理(保留最近{days}天)"

def send_dingtalk(msg):
webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxx"
data = {"msgtype": "text", "text": {"content": msg}}
requests.post(webhook, json=data)

if __name__ == "__main__":
result = clean_logs("app")
send_dingtalk(result)

这个脚本可以在多台机器上部署,配合Ansible统一调度,真正实现“人不动,活照干”。

别忘了错误处理和日志

脚本跑一次没问题,连续跑一周可能就出岔子。比如网络抖动导致SSH失败,或者磁盘满了删不掉文件。加上基础的异常捕获,能省去很多排查时间。

ssh $ip 'df -h' || echo "警告:无法连接 $ip" >> /var/log/check.log

把输出记录下来,出了问题翻日志比问人快多了。

自动化不是一蹴而就的事。先从你最烦的那个重复操作开始,写个脚本,哪怕只有三行,只要能少敲一次命令,就是胜利。时间久了,你会发现,自己不再是“救火队员”,而是那个让系统安稳运行的人。