公司凌晨三点,服务器突然告警,硬盘使用率飙到98%。值班的小李一边啃着泡面,一边手动清理日志、重启服务。这样的场景,在不少运维岗位上并不罕见。其实,很多重复性操作完全可以通过运维自动化脚本编写来解决,把人从“救火队员”变成真正的系统守护者。
为什么非写脚本不可?
每天登录十几台服务器查日志、同步配置、备份数据,光是敲命令就容易手抖出错。一旦某个环节漏了,问题可能几天后才暴露。用脚本把这些流程固定下来,不仅能省时间,还能减少人为失误。比如一个简单的日志轮转脚本,设置好定时任务后,再也不用担心磁盘被日志塞爆。
从最常用的场景开始写
别一上来就想做个全能工具。先挑高频、固定的活儿下手。比如批量检查服务器SSH连接状态,以前得一台台试,现在用个Shell脚本几秒搞定:
#!/bin/bash
for ip in 192.168.1.{1..10}; do
if ping -c 1 -W 1 $ip > /dev/null; then
echo "$ip 可达"
else
echo "$ip 不通"
fi
done
再比如,每天早上要查Web服务是否正常运行,可以写个Python脚本自动请求接口:
import requests
urls = ["http://site-a.com/health", "http://site-b.com/ping"]
for url in urls:
try:
r = requests.get(url, timeout=5)
if r.status_code == 200:
print(f"{url} 正常")
else:
print(f"{url} 异常: {r.status_code}")
except Exception as e:
print(f"{url} 请求失败: {e}")
安全性和权限控制不能马虎
脚本跑起来方便,但也可能成为安全隐患。比如用root权限执行的脚本,一旦被篡改,后果严重。建议遵循最小权限原则,普通任务用普通账户执行。脚本文件本身也要设置合适权限,避免被随意修改:
chmod 700 deploy.sh
chown ops:ops deploy.sh
另外,敏感信息如密码、密钥不要硬编码在脚本里,可以通过环境变量或配置文件加载,且配置文件设为仅授权用户可读。
结合定时任务和日志记录
写了脚本不等于万事大吉。配合cron定时运行,让它真正“自动化”。比如每天凌晨两点执行备份:
0 2 * * * /home/ops/scripts/db_backup.sh
同时记得在脚本里加日志输出,方便排查问题。哪怕只是简单记录开始和结束时间,也能在出事时快速定位:
echo "[$(date)] 开始执行备份任务" >> /var/log/backup.log
运维自动化不是一步到位的事。从一个小脚本开始,解决一个具体问题,慢慢积累。你会发现,那些曾经让你加班到深夜的琐事,正悄悄被几行代码扛了起来。