这12个Linux脚本让你效率翻倍, 真正的运维从不亲自处理告警

内容分享6小时前发布
1 1 0

前言

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

这12个Linux脚本让你效率翻倍, 真正的运维从不亲自处理告警

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

© 版权声明

相关文章

1 条评论

  • 头像
    来点欧气配饭 读者

    收藏了,感谢分享

    无记录
    回复