雨云Shell自动化运维脚本:备份/监控/巡检一键化

备份、监控、日志巡检写成脚本,丢给 crontab 定时跑,运维不再靠记性
发布于
2

在雨云云服务器上跑业务,备份、看资源、查日志这些活儿几乎天天有。手写命令费时间,忙起来还容易漏。把流程固化成 Shell 脚本,再交给 crontab 定时跑,运维压力小一大半。下面几个脚本都能直接抄去用。

一、脚本放在哪、怎么管

建议统一放 /opt/scripts/,脚本加可执行权限 chmod +x,日志统一写到 /var/log/ops/。每个脚本开头写清楚用途和参数,方便半年后自己看。版本管理可以用 git 推一份到私有仓库。

二、自动备份:数据库 + 网站目录

最该自动化的就是备份。下面是一个组合脚本:

#!/bin/bash
DATE=$(date +%F)
BACKUP_DIR=/backup/$DATE
mkdir -p $BACKUP_DIR
# 数据库
mysqldump -u root -p"$DB_PASS" --all-databases | gzip > $BACKUP_DIR/db.sql.gz
# 网站目录
tar czf $BACKUP_DIR/www.tar.gz /var/www/html
# 保留 7 天
find /backup -type d -mtime +7 -exec rm -rf {} ;

关键点:密码不要明文写死在脚本里,用环境变量或 ~/.my.cnf 读;保留天数按磁盘算,别无限堆。

三、资源监控:CPU/内存/磁盘超阈值告警

CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print 100-$8}')
MEM=$(free | awk '/Mem/{printf "%.0f", $3/$2*100}')
DISK=$(df / | awk 'NR==2{print $5}' | tr -d '%')
if [ "$CPU" -gt 90 ] || [ "$MEM" -gt 90 ] || [ "$DISK" -gt 85 ]; then
    echo "告警 机器$(hostname) CPU:$CPU% MEM:$MEM% DISK:$DISK%" | mail -s "雨云服务器告警" admin@example.com
fi

阈值按业务调。邮件告警需要服务器装好 mailutils 且能发信,也可以用 curl 推到企业微信/钉钉机器人,更及时。

四、日志巡检:错误关键字抓取

grep -iE "error|timeout|exception" /var/log/nginx/error.log | tail -50 > /var/log/ops/err_$(date +%F).txt
if [ -s /var/log/ops/err_$(date +%F).txt ]; then
    cat /var/log/ops/err_$(date +%F).txt | mail -s "今日错误日志" admin@example.com
fi

每天把 Nginx/PHP 的错误日志里关键字抓出来汇总,不用自己翻。

五、用 crontab 定时执行

编辑 crontab -e

0 3 * * * /opt/scripts/backup.sh >> /var/log/ops/backup.log 2>&1
*/5 * * * * /opt/scripts/monitor.sh >> /var/log/ops/monitor.log 2>&1
0 1 * * * /opt/scripts/logcheck.sh >> /var/log/ops/logcheck.log 2>&1

备份每天凌晨 3 点,监控每 5 分钟一次,日志巡检每天 1 点。日志重定向别漏,否则出问题没地方查。

六、雨云上的注意事项

雨云云服务器新购用优惠码 admin01 走专属入口 https://www.jiyueip.com/link/5617 能拿五折,多开几台做主备时成本可控。备份别只存在本机——本机盘坏了全完,建议同步到雨云对象存储(见本站 OSS 实战篇)或者另一台内网机器。同节点内网传备份免费,跨公网才计费。

七、脚本健壮性几个习惯

  • 开头加 set -euo pipefail,命令失败就停,避免连环错;
  • 路径用绝对路径,cron 环境没有你的 PATH;
  • 锁文件防止脚本重叠跑(flock);
  • 重要操作前先 dry-run 或打日志,别一上来就 rm -rf。

常见问题

关于在雨云服务器上写运维脚本的高频疑问,下面一并解答。

常见问题(FAQ)

雨云服务器上 crontab 不执行脚本怎么办?
多半是 PATH 问题或没给执行权限。脚本里用绝对路径,开头写 #!/bin/bash,chmod +x,并把输出重定向到日志,报错一眼能看到。
备份只存在本机够吗?
不够,本机盘故障就全丢。至少再同步一份到雨云对象存储或另一台内网机器,异地/异机才有意义。
Shell 监控能替代专业监控系统吗?
轻量场景够用,零成本。等业务规模起来、指标变多,再上 Prometheus+Grafana 这类专业监控,Shell 脚本作为补充。
雨云多台机器怎么统一运维?
用 Ansible 批量推送脚本最省事;或者让每台机器的 crontab 去拉同一份 git 仓库的脚本,保证多台配置一致。

本文由作者原创/授权发布于极跃圈(jiyueip.com)未经许可,禁止转载。题图来自Unsplash,基于CC0协议。

声明:极跃圈(JIYUEIP.com)内网友所发表的所有内容及言论仅代表其本人,并不反映任何极跃圈(JIYUEIP.com)之意见及观点。

0 讨论
热门最新
总结
暂无总结
0 / 600