绝招 !!! 20式运维秘笈

文摘   2024-11-01 21:00   湖北  

在日常运维工作中,Shell脚本是不可或缺的强大工具。通过编写和使用Shell脚本,运维人员可以实现任务的自动化,提高工作效率,减少人为错误。

1. 检查磁盘空间

#!/bin/bash
# 检查磁盘空间,如果根分区使用率超过80%,则发送警告邮件
THRESHOLD=80
EMAIL="admin@example.com"
df -h | grep -q "/dev/root"
if [ $? -eq 0 ]; then
    USAGE=$(df -h | grep "/dev/root" | awk '{ print $5 }' | sed 's/%//g')
    if [ $USAGE -ge $THRESHOLD ]; then
        echo "警告:根分区使用率已达 $USAGE%" | mail -s "磁盘空间警告" $EMAIL
    fi
fi

2. 监控内存使用

#!/bin/bash
# 监控内存使用率,如果超过80%,则记录到日志文件
THRESHOLD=80
MEM_USAGE=$(free -m | awk 'NR==2{printf "%.2f", $3*100/$2 }')
if [ $MEM_USAGE -ge $THRESHOLD ]; then
    echo "$(date): 内存使用率已达 $MEM_USAGE%" >> /var/log/mem_usage.log
fi

3. 服务状态检查

#!/bin/bash
# 检查nginx服务是否运行,如果未运行则尝试重启
SERVICE="nginx"
if ! systemctl is-active --quiet $SERVICEthen
    echo "$SERVICE 服务未运行,尝试重启..."
    systemctl restart $SERVICE
fi

4. 清理旧日志文件

#!/bin/bash
# 清理/var/log目录下超过7天的日志文件
find /var/log -type f -mtime +7 -exec rm -f {} \;

5. MySQL数据库备份

#!/bin/bash
# 每天备份MySQL数据库
BACKUP_DIR="/path/to/backup"
DATE=$(date +%F)
mysqldump -u root -p'yourpassword' yourdatabase > $BACKUP_DIR/yourdatabase_$DATE.sql

6. 重启资源消耗过高的进程

#!/bin/bash
# 重启CPU使用率超过80%的进程
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
if [ $CPU_USAGE -gt 80 ]; then
    echo "系统负载过高,重启系统..."
    reboot
fi

7. 检查端口开放状态

#!/bin/bash
# 检查指定端口是否开放
PORT=$1
if netstat -tuln | grep $PORTthen
    echo "端口 $PORT 已开放"
else
    echo "端口 $PORT 未开放"
fi

8. 同步文件到备份服务器

#!/bin/bash
# 使用rsync同步文件到备份服务器
rsync -avz /path/to/source user@backupserver:/path/to/destination

9. 系统资源监控

#!/bin/bash
# 监控并报告CPU和内存使用情况
while truedo
    echo "CPU: $(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')%"
    echo "
MEM: $(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')"
    sleep 60
done

10. 检查磁盘I/O

#!/bin/bash
# 监控磁盘I/O,如果超过阈值,则发送警告
IO_WAIT=$(iostat -dx /dev/sda | awk 'NR==4{print $4+$5}')
if [ $IO_WAIT -gt 60 ]; then
    echo "警告:磁盘I/O等待时间超过60%" | mail -s "磁盘I/O警告" admin@example.com
fi

当然,这里是另外10个实用的运维Shell脚本:

11. 检查磁盘空间并清理

#!/bin/bash
# 检查磁盘空间,如果使用率超过90%,则清理/tmp目录下的文件
THRESHOLD=90
if [ $(df / | awk 'NR==2{print $5}' | sed 's/%//g') -ge $THRESHOLD ]; then
    echo "磁盘空间使用率超过$THRESHOLD%,开始清理/tmp目录..."
    find /tmp -type f -delete
fi

12. 监控特定服务状态

#!/bin/bash
# 监控特定服务状态,如果服务未运行,则尝试重启
SERVICE="httpd"
if ! systemctl is-active --quiet $SERVICEthen
    echo "$SERVICE 服务未运行,尝试重启..."
    systemctl start $SERVICE
fi

13. 备份配置文件

#!/bin/bash
# 备份/etc/目录下的配置文件到/backup/
DATE=$(date +%Y%m%d)
tar -czf /backup/config_backup_$DATE.tar.gz /etc/

14. 检查系统日志错误

#!/bin/bash
# 检查系统日志中的错误信息
grep -i "error" /var/log/syslog | mail -s "系统日志错误" admin@example.com

15. 检查系统运行时间

#!/bin/bash
# 检查系统运行时间,如果超过7天,则发送警告邮件
DAYS=$(uptime -s | awk -F' ' '{print ($1+0)}')
if [ $DAYS -gt 7 ]; then
    echo "系统已运行超过7天" | mail -s "系统运行时间警告" admin@example.com
fi

16. 重启网络服务

#!/bin/bash
# 重启网络服务
service network restart

17. 检查磁盘I/O等待时间

#!/bin/bash
# 检查磁盘I/O等待时间,如果超过50%,则发送警告
IO_WAIT=$(iostat /dev/sda 1 2 | tail -1 | awk '{print $4+$5}')
if [ $IO_WAIT -gt 50 ]; then
    echo "磁盘I/O等待时间超过50%" | mail -s "磁盘I/O警告" admin@example.com
fi

18. 检查系统端口开放状态

#!/bin/bash
# 检查系统端口开放状态,如果指定端口未开放,则发送警告
PORT=$1
if ! netstat -tuln | grep $PORTthen
    echo "端口$PORT未开放" | mail -s "端口开放状态警告" admin@example.com
fi

19. 文件同步

#!/bin/bash
rsync -avz /src/ /dst/
echo "/src/ to /dst/"

20.比较两个目录的内容

#!/bin/bash

diff -rq /dir1 /dir2

近期文章:

运维封了这30端口,黑客哭了 !!!
要被优化 !!! 一个人运维了1000台服务器之后
19500 Star开源 ! 6步部署6000万用户的网站
5200 Star开源 ! 6步安装MarkDown协作神器
1400 Star开源 !!! 只要5步安装书签神器

开源日记
分享10k+Star的优质开源项目。
 最新文章