程序员用AI生成运维脚本,自动化巡检服务器
服务器巡检如果靠人工登录逐台敲命令,不仅效率低,还容易漏看关键指标。
程序员用AI生成运维脚本,可以快速得到一份能跑的Shell脚本,自动检查CPU、内存、磁盘和关键服务,再配合crontab定时执行,基本能替代日常手工巡检。
下面从零开始,带你走完从生成脚本到验证效果的完整流程。
先明确巡检目标和运行环境
动手之前,先确认三件事:脚本要检查哪些指标、在哪台机器上跑、用什么方式触发。
常见的基础巡检项包括:
- CPU负载:
uptime或/proc/loadavg - 内存使用率:
free -m - 磁盘使用率:
df -h - 关键进程:
ps或systemctl is-active - 网络连通性:
ping或curl
环境方面,绝大多数Linux发行版都自带Bash,脚本无需额外安装依赖。
如果你用的是宝塔面板,可以在“计划任务”里添加Shell脚本,路径在面板左侧菜单“计划任务”->“添加任务”->任务类型选“Shell脚本”。
用AI生成脚本的提示词怎么写
AI生成的脚本质量,很大程度取决于你的描述是否具体。
不要只说“帮我写个巡检脚本”,建议把指标、阈值、输出格式都讲清楚。
例如:
请生成一个Linux服务器巡检Shell脚本,要求:
1. 检查CPU负载(1分钟、5分钟、15分钟),超过CPU核心数时告警;
2. 检查内存使用率,超过85%告警;
3. 检查根分区磁盘使用率,超过80%告警;
4. 检查nginx和sshd服务是否运行;
5. 输出格式:每项显示“正常”或“告警:具体值”;
6. 脚本开头定义变量,方便修改阈值。
把这段提示词发给AI,得到的脚本通常已经可用。
拿到后不要直接扔到生产环境,先复制到测试机或临时目录跑一遍。
关键步骤:保存脚本并赋予执行权限
假设AI生成的脚本内容如下(可根据实际情况调整):
#!/bin/bash
# 服务器基础巡检脚本
CPU_THRESHOLD=80
MEM_THRESHOLD=85
DISK_THRESHOLD=80
# CPU负载检查
cpu_cores=$(nproc)
load1=$(awk '{print $1}' /proc/loadavg)
load_percent=$(echo "$load1 $cpu_cores" | awk '{printf "%.0f", ($1/$2)*100}')
if [ "$load_percent" -gt "$CPU_THRESHOLD" ]; then
echo "CPU负载告警:1分钟负载${load1},核心数${cpu_cores}"
else
echo "CPU负载正常"
fi
# 内存检查
mem_used=$(free -m | awk 'NR==2{printf "%.0f", $3/$2*100}')
if [ "$mem_used" -gt "$MEM_THRESHOLD" ]; then
echo "内存告警:使用率${mem_used}%"
else
echo "内存正常"
fi
# 磁盘检查
disk_used=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//')
if [ "$disk_used" -gt "$DISK_THRESHOLD" ]; then
echo "磁盘告警:根分区使用率${disk_used}%"
else
echo "磁盘正常"
fi
# 服务检查
for svc in nginx sshd; do
if systemctl is-active --quiet $svc; then
echo "$svc 运行正常"
else
echo "$svc 未运行"
fi
done
保存为 /opt/scripts/check.sh,然后执行:
chmod +x /opt/scripts/check.sh
/opt/scripts/check.sh
如果看到类似“CPU负载正常”“内存正常”的输出,说明脚本基本可用。
配置定时任务实现自动巡检
手动执行一次不算自动化,用crontab让脚本每天定时跑。
执行 crontab -e,添加一行:
0 8 * * * /opt/scripts/check.sh >> /var/log/server_check.log 2>&1
这表示每天早上8点执行巡检,结果追加到日志文件。
保存后可以用 crontab -l 确认任务已添加。
如果你用宝塔面板,直接添加计划任务:任务类型选“Shell脚本”,执行周期选“每天”,脚本内容填 /opt/scripts/check.sh,日志会由面板自动记录。
避坑指南:AI脚本常见的几个坑
AI生成的脚本不一定完全贴合你的系统,下面这些地方容易出问题:
- 路径写死:AI可能假设服务装在
/usr/local/nginx,实际用systemd管理时直接用systemctl更稳。 - 阈值不合理:默认80%的磁盘阈值对日志量大的机器可能偏低,建议按业务调整。
- 命令不存在:部分精简系统没有
nproc,可以用grep -c ^processor /proc/cpuinfo替代。 - 权限问题:crontab执行环境和登录shell不同,脚本里尽量用绝对路径,避免依赖环境变量。
- 中文乱码:如果日志出现乱码,在脚本开头加
export LANG=en_US.UTF-8或zh_CN.UTF-8。
效果验证与后续优化
脚本跑起来后,检查日志文件:
cat /var/log/server_check.log
确认输出包含各项检查结果,并且时间戳是最近一次执行时间。
如果某台机器没有产生日志,先检查crontab服务是否运行:systemctl status crond(CentOS)或 systemctl status cron(Debian/Ubuntu)。
后续想让巡检更实用,可以加入邮件告警或Webhook推送。
比如在脚本末尾增加:
if echo "$result" | grep -q "告警"; then
curl -X POST -H "Content-Type: application/json" -d '{"msg":"服务器巡检异常"}' https://你的webhook地址
fi
这样只有出现告警时才通知,避免每天收到无用消息。
常见问题
AI生成的脚本能直接在生产环境用吗?
不建议直接使用。先复制到测试环境运行,确认输出符合预期、没有误报后再部署到生产机器。
脚本执行后没有任何输出怎么办?
检查脚本是否有执行权限,以及是否在crontab中使用了绝对路径。可以手动执行 bash -x /opt/scripts/check.sh 查看详细执行过程。
用AI生成运维脚本需要付费吗?
大部分AI工具都有免费额度,足够生成基础巡检脚本。如果脚本较复杂,可以分多次对话让AI补充功能,不必一次性追求完美。
巡检脚本多久跑一次合适?
一般服务器每天一次即可,核心业务机器可以每6小时一次。频率太高会增加日志量,太低可能错过突发问题,建议根据业务重要性调整。
整体来说,程序员用AI生成运维脚本,核心价值在于快速得到可运行的代码骨架,再结合自己的环境微调。
把脚本放到crontab或宝塔计划任务里,自动化巡检服务器就真正落地了。
第一次配置时建议手动触发一次,确认日志和告警都正常,后面基本不用再操心。