阿里云充值到账查询 自动化运维ECS常用Shell脚本
为什么需要自动化运维脚本?
各位运维老铁,是不是总被重复的琐事缠身?手动删日志、检查CPU、备份数据……简直像在玩‘打地鼠’,刚按下一个,另一个又冒出来。别慌!Shell脚本就是你的‘外挂’,写一次,管一辈子。
日志清理脚本——告别‘磁盘爆仓’噩梦
服务器日志堆积如山?别担心,一个脚本就能搞定!想象硬盘空间被日志文件挤得喘不过气,系统卡顿报警声此起彼伏。这时候,自动化清理脚本就是你的‘急救包’。
脚本示例与解析
#!/bin/bash
# 检查是否以root权限运行
if [ "$(id -u)" != "0" ]; then
echo "错误:请使用root权限运行本脚本"
exit 1
fi
# 记录清理操作
LOG_FILE="/var/log/cleanup.log"
echo "$(date): 开始日志清理..." >> $LOG_FILE
# 删除7天前的普通日志
echo "正在清理/var/log下的旧日志..." >> $LOG_FILE
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \; 2>> $LOG_FILE
echo "已删除 $(find /var/log -name "*.log" -mtime +7 -exec echo {} \; | wc -l) 个日志文件" >> $LOG_FILE
# 清理压缩日志,30天前的
echo "清理压缩日志..." >> $LOG_FILE
find /var/log -type f -name "*.log.*" -mtime +30 -exec rm -f {} \; 2>> $LOG_FILE
echo "已删除 $(find /var/log -name "*.log.*" -mtime +30 -exec echo {} \; | wc -l) 个压缩日志文件" >> $LOG_FILE
echo "日志清理完成!" >> $LOG_FILE这个脚本有三大核心亮点:
- 权限检查:开头就确认是否root运行,避免普通用户误删系统文件。
- 日志追踪:所有操作都记录到cleanup.log,万一删错还能回头查。
- 安全删除:用find精准筛选文件,比如-mtime +7表示7天前修改的文件,-name "*.log"只处理.log结尾的文件,绝不会误删其他重要数据。
注意:实际使用时,把/var/log替换成你的日志目录。比如Nginx日志可能在/var/log/nginx,MySQL日志可能在/var/lib/mysql,得按需调整路径。
实战技巧与避坑
脚本写得再好,也可能掉坑里。比如:
- 别急着删!先试‘dry run’:把rm -f改成echo,比如find ... -exec echo {} \;,先看看要删哪些文件,确认无误再执行真实删除。
- 路径要准确:别一锅端!不同服务日志位置不同,Nginx、Apache、MySQL的路径都得单独处理。
- 定时任务要测试:在crontab里设置每天凌晨2点运行,但先手动执行一次,看看会不会报错。比如crontab -e里加:0 2 * * * /path/to/cleanup.sh
监控报警脚本——7x24小时守护你的服务器
服务器宕机?CPU爆表?别等客户投诉再动手!让脚本当你的‘电子眼’,实时监控、秒级报警。
CPU监控+邮件报警
#!/bin/bash
THRESHOLD=85 # CPU使用率阈值
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed 's/.*, *\([0-9.]*\)%* id.*/\1/' | awk '{print 100 - $1}')
# 检查是否超过阈值
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
echo "警告:CPU使用率${CPU_USAGE}%过高!当前负载:$(uptime)" | mail -s "服务器CPU告警" [email protected]
fi这里用top命令获取CPU使用率,通过sed和awk提取数值。bc -l用来做浮点数比较,避免整数计算误差。注意:mail命令需要先配置邮件服务,比如安装postfix或sendmail。如果服务器没装mail,可以用curl调用邮件API,比如企业微信或钉钉机器人告警。
磁盘空间预警
#!/bin/bash
THRESHOLD=85
DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt $THRESHOLD ]; then
echo "磁盘使用率${DISK_USAGE}%超过阈值!" | mail -s "磁盘空间告警" [email protected]
fidf / | tail -1取根分区使用情况,sed去掉%符号后转为数字比较。同样可以扩展到监控其他分区,比如/var分区:df /var | tail -1 | awk '{print $5}'。
自动备份脚本——数据安全的‘保险箱’
数据丢失=职场灾难。一个自动化备份脚本,就是给你的数据上了‘双重保险’。
每日增量备份方案
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/web"
SOURCE_DIR="/var/www/html"
# 创建备份目录
mkdir -p $BACKUP_DIR
# 打包并压缩备份
tar -czf $BACKUP_DIR/backup-$DATE.tar.gz $SOURCE_DIR
# 保留7天备份,删除更早的
find $BACKUP_DIR -type f -name "backup-*.tar.gz" -mtime +7 -exec rm -f {} \;这个脚本把/var/www/html打包成tar.gz文件,文件名包含日期(如backup-20240520.tar.gz),然后删除7天前的备份。备份路径和源路径记得改成你的实际目录!如果数据量大,可以用rsync做增量备份,只同步变化的文件,更省时间。
批量操作脚本——管理多台ECS的神器
运维多台ECS服务器?手动一台台操作太low!用脚本批量管理,效率翻倍。
批量部署与重启
#!/bin/bash
SERVERS=("192.168.1.10" "192.168.1.11" "192.168.1.12")
for server in "${SERVERS[@]}"; do
ssh -o ConnectTimeout=5 root@$server "systemctl restart nginx"
echo "已重启 $server 的Nginx服务"
done关键点:
- 用数组定义服务器列表,方便扩展。
- ssh -o ConnectTimeout=5设置连接超时5秒,避免某台服务器卡住卡死。
- 重要前提:必须提前配置SSH密钥认证,否则需要手动输密码,脚本会卡住。用ssh-keygen生成密钥,再用ssh-copy-id把公钥分发到各服务器。
实战技巧与避坑指南
阿里云充值到账查询 最后送你几个保命技巧,避免踩雷:
1. 先测试,后上线:脚本写完,先在测试环境跑一遍。比如日志清理脚本,先用echo代替rm,确认删除列表无误。
2. 权限控制要严格:脚本文件权限设为700(只有root可读写),避免被其他用户篡改。
3. 备份后再操作:删除或修改关键文件前,先备份一份。比如rm -rf前先cp -r备份。
4. 告警多通道:光发邮件不够,可以同时接入企业微信、钉钉、短信,确保告警能及时收到。
5. 别用root直接跑脚本:用普通用户+sudo的方式运行,减少误操作风险。
记住:自动化运维不是‘甩手掌柜’,而是让你更聪明地工作。脚本写得好,运维效率高,摸鱼时间多!现在就去试试吧,你的服务器会感谢你的!

