前言
身为运维工程师,你是否总在重复应对磁盘告急、服务异常、深夜告警?手动操作不仅效率低下,更让关键业务暴露于风险之中。根据这种情况,我们系统梳理了12个高频、刚需的Bash脚本,覆盖监控、备份、自愈与巡检四大核心场景。这些脚本均经生产环境检验,开箱即用,旨在将你从重复劳动中解放,实现运维工作的自动化与智能化,让系统稳定运行的同时,也为你赢得更多专注价值创造的时间。

1.检查磁盘使用情况
bash
#!/bin/bash
#检查根分区磁盘使用情况
df -h / | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print $5″ “$1}'
#如果使用超过 80%,则输出警告
threshold=80
used=$(df -h / | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 }' | sed 's/%//g')
if [ $used -gt $threshold ]; then
echo “警告:根分区使用超过 $threshold%!”
fi
2.监控系统负载
bash
#!/bin/bash
#获取当前负载
load=$(uptime | awk -F'load average: ' '{ print $2 }' | awk '{ print $1,$2,$3 }')
#输出负载
echo “当前系统负载: $load”
#如果1分钟平均负载超过5,则输出警告
if [ $(echo “$load” | awk '{ print $1 }' | sed 's/,//g') -gt 5 ]; then
echo “警告:系统负载过高!”
fi
3.自动备份数据库
bash
#!/bin/bash
#数据库信息
db_user=”your_db_user”
db_pass=”your_db_pass”
db_name=”your_db_name”
backup_dir=”/path/to/backup”
#创建备份目录(如果不存在)
mkdir-p $backup_dir
#执行备份
mysqldump -u $db_user -p $db_name > “$backup_dir/$(date +%F)-$db_name.sql”
#输出备份完成信息
echo”数据库$db_name 已备份到 $backup_dir”
4.检查服务状态
bash
#!/bin/bash
#要检查的服务名称
service_name=”your_service_name”
#检查服务状态
service_status=$(systemctl is-active –quiet “$service_name”)
#输出服务状态
if [ “$service_status” = “active” ]; then
echo “$service_name 服务正在运行。”
else
echo “警告: $service_name 服务未运行!”
fi
5.清理临时文件
bash
#!/bin/bash
#临时文件目录
temp_dirs=”/tmp /var/tmp”
#清理临时文件
for dir in $temp_dirs; do
echo “清理目录: $dir”
rm -rf “$dir”/*
done
#输出清理完成信息
echo”临时文件已清理。”
6.检查内存使用情况
bash
#!/bin/bash
#获取内存使用情况
mem_usage=$(free -m | awk 'NR==2{printf “内存使用率:%.2f%%
“, $3/$2*100}')
#输出内存使用情况
echo -e “$mem_usage”
#如果内存使用率超过80%,则输出警告
if (( $(echo “$mem_usage” | awk -F':|%' '{print $2}') > 80 )); then
echo “内存使用率超过80%!”
fi
7.自动重启崩溃的服务
bash
#!/bin/bash
#要监控的服务列表
services=(“service1” “service2” “service3”)
#循环检查服务状态
for service in “${services[@]}”; do
if ! systemctl is-active –quiet “$service”; then
echo “服务 $service 已崩溃,正在重启…”
systemctl restart “$service”
if systemctl is-active –quiet “$service”; then
echo “服务 $service 重启成功。”
else
echo “警告: 服务 $service 重启失败!”
fi
fi
done
8.日志轮转检查
bash
#!/bin/bash
# 日志文件目录
log_dir=”/var/logn”
#检查日志文件大小,超过100MB则轮转
for log in “$log_dir”/*.log; do
if [ -f “$log” ] && [ $(du -m “$log” | awk '{print $1}') -gt 100 ]; then
echo “日志文件 $log 大小超过100MB,正在轮转…”
logrotate -f /etc/logrotate.conf
echo “日志文件 $log 轮转完成。”
fi
done
9.网络连通性测试
bash
#!/bin/bash
#要测试的目标IP或域名列表
targets=(“8.8.8.8” “google.com”)
#循环测试网络连通性
for target in “${targets[@]}”; do
if ping -c 1 “$target” &>/dev/null; then
echo “网络连通性测试: 到 $target 连通。”
else
echo “警告: 到 $target 网络不通!”
fi
done
10.磁盘1/O监控
bash
#!/bin/bash
#获取磁盘1/O情况
iostat_output=$(iostat -dx 1 1 | grep -E 'Device|sda') # 假设监控sda设备,可根据需要修改
#输出磁盘1/O情况
echo “$iostat_output”
#提取并检查r/s(每秒读取的请求数)和w/s(每秒写入的请求数)read_requests=$(echo “$iostat_output” |
#如果r/s或w/s超过100,则输出警告(阈值可根据实际情况调整)
if (( $(echo “$read_requests” | sed 's/[^0-9]//g') > 100 )) || (( $(echo “$write_requests” | sed 's/[^0-9]//g') > 100 )); then
echo “警告: 磁盘I/O请求数过高!”
fi
11.检查系统更新
bash
#!/bin/bash
#更新包列表
apt-get update -y # 对于Debian/Ubuntu系统,如果是RedHat/CentOS则使用yum check-update
#检查是否有可用更新
updates=$(apt-get –simulate upgrade -y | grep “Inst” | wc -l) # 对于 RedHat/CentOS,可能需要调整命令
if [ “$updates” -gt 0 ]; then
echo “有 $updates 个可用更新。”
else
echo “系统已是最新版本。”
fi
12.自动备份MySQL数据库
bash
#!/bin/bash
#MySQL数据库信息
mysql_user=”your_mysql_user”
mysql_pass=”your_mysql_pass”
mysql_host=”localhost”
databases=(“db1” “db2”) # 要备份的数据库列表
backup_dir=”/path/to/backup”
#创建备份目录(如果不存在)
mkdir -p “$backup_dir”
#循环备份每个数据库
for db in “${databases[@]}”; do
mysqldump -u “$mysql_user” -p”$mysql_pass” -h “$mysql_host” “$db” > “$backup_dir/$(date +%F)-$db.sql”
if [ $? -eq 0 ]; then
echo “数据库 $db 备份成功。”
else
echo “警告: 数据库 $db 备份失败!”
fi
done





收藏了,感谢分享