实战学习Liunx(图文教程二十七)
AI-摘要
KunKunYu GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
本文最后更新于 2025-10-11,文章内容可能已经过时。
服务器磁盘监控与文件迁移方案
一、监控硬盘使用率并发送邮件通知
1. 安装和配置邮件服务
Sendmail安装配置
# 安装Sendmail邮件服务
sudo yum install sendmail sendmail-cf -y
编辑Sendmail配置文件 /etc/mail/sendmail.mc
,将 DAEMON_OPTIONS
行中的 127.0.0.1
改为 0.0.0.0
,以便任何主机都可以访问Sendmail服务。
# 生成Sendmail配置文件
sudo make -C /etc/mail/
2. 创建磁盘监控脚本
创建脚本 /usr/local/bin/disk_usage_alert.sh
:
#!/bin/bash
# 定义阈值(以百分比表示)
threshold=75
# 获取当前磁盘使用率(根分区)
disk_usage=$(df -h | awk '$NF=="/"{print substr($5,1,length($5)-1)}')
# 检查磁盘使用率是否超过阈值
if [ $disk_usage -gt $threshold ]; then
# 发送邮件通知
echo "警告:磁盘使用率已超过阈值!当前使用率:$disk_usage%" | mail -s "磁盘使用率警告" admin@example.com
fi
更健壮的磁盘监控脚本示例:
#!/bin/bash
# 设置阈值和收件人
THRESHOLD=75
EMAIL="admin@example.com,ops@example.com"
LOG_FILE="/var/log/disk_monitor.log"
# 检查所有分区
df -hP | grep -v tmpfs | awk 'NR>1 {print $5, $6}' | while read usage mount_point; do
# 移除百分号,转换为数字
usage_num=${usage%\%}
if [ $usage_num -gt $THRESHOLD ]; then
alert_msg="警告:分区 $mount_point 使用率已达 $usage,超过阈值 ${THRESHOLD}%!"
echo "$(date +"%Y-%m-%d %H:%M:%S") - $alert_msg" >> $LOG_FILE
# 发送邮件告警
echo "$alert_msg" | mail -s "【磁盘告警】服务器 $(hostname)" $EMAIL
# 查找大文件前3名
big_files=$(find $mount_point -type f -exec du -h {} + 2>/dev/null | sort -rh | head -3)
echo "占用空间最大的3个文件:" >> $LOG_FILE
echo "$big_files" >> $LOG_FILE
fi
done
3. 设置定时任务
# 给脚本添加执行权限
sudo chmod +x /usr/local/bin/disk_usage_alert.sh
# 编辑crontab
sudo crontab -e
# 添加以下行(每分钟检查一次)
* * * * * /usr/local/bin/disk_usage_alert.sh > /dev/null 2>&1
# 或者每天特定时间检查(如每小时检查一次)
0 * * * * /usr/local/bin/disk_usage_alert.sh > /dev/null 2>&1
二、大文件或目录跨服务器转移
1. 使用SCP命令进行文件传输
基本语法:
scp <源服务器用户名>@<源服务器IP地址>:<源文件路径> <目标服务器用户名>@<目标服务器IP地址>:<目标文件路径>
文件传输示例:
# 单个文件传输
scp root@192.168.0.1:/data/tomcat/logs/catalina.out root@192.168.0.2:/data/logs/
# 需要输入目标服务器密码
目录传输示例:
# 传输目录下所有文件
scp root@192.168.0.1:/data/tomcat/logs/* root@192.168.0.2:/data/logs/
# 递归传输整个目录(加-r参数)
scp -r root@192.168.0.1:/data/tomcat/logs/ root@192.168.0.2:/data/logs/
2. 高级文件传输选项
使用rsync进行增量同步(更高效):
# 安装rsync
sudo yum install rsync -y
# 同步目录(只传输变化的部分)
rsync -avz -e ssh root@192.168.0.1:/data/tomcat/logs/ root@192.168.0.2:/data/logs/
参数说明:
-
-a
:归档模式,保持文件属性 -
-v
:详细输出 -
-z
:压缩传输 -
-e ssh
:使用SSH加密传输
三、使用sendEmail进行高级邮件通知
1. 安装sendEmail
# 下载安装包
wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
# 解压
tar zxf sendEmail-v1.56.tar.gz -C /usr/src/
# 进入解压目录并安装
cd /usr/src/sendEmail-v1.56/
cp -a sendEmail /usr/local/bin/
2. 创建多收件人监控脚本
创建脚本 /usr/local/bin/warning-by-shaun.sh
:
#!/bin/bash
# 定义阈值
threshold=75
# 收件人列表(多个邮箱用逗号分隔)
mail_receive="demo1@onmicrosoft.com,demo2@88.com,demo3@111.com"
# 发件人配置
mail_sender="demo@88.com"
smtp_server="smtp.88.com"
smtp_user="demo@88.com"
smtp_pass="发件人邮箱授权密码"
# 获取磁盘使用率
disk_usage=$(df -h | awk '$NF=="/"{print substr($5,1,length($5)-1)}')
# 检查是否超过阈值
if [ $disk_usage -gt $threshold ]; then
# 发送邮件给多个收件人
/usr/local/bin/sendEmail \
-o message-charset=utf8 \
-f $mail_sender \
-t $mail_receive \
-s $smtp_server \
-u "【紧急】磁盘使用率警告 - 服务器 $(hostname)" \
-xu $smtp_user \
-xp $smtp_pass \
-m "警告:服务器 $(hostname) 的磁盘使用率已超过阈值!
当前使用率:$disk_usage%
阈值设置:$threshold%
检查时间:$(date +"%Y-%m-%d %H:%M:%S")
请及时清理磁盘空间或迁移大文件。
磁盘详细信息:
$(df -h)
占用空间前5的目录:
$(du -h --max-depth=1 / 2>/dev/null | sort -hr | head -5)" \
>> /usr/local/bin/output.log 2>&1
fi
3. sendEmail参数详解
四、自动化文件清理和迁移方案
1. 结合监控的自动清理脚本
#!/bin/bash
# 配置参数
THRESHOLD=75
BACKUP_SERVER="192.168.0.2"
BACKUP_USER="root"
BACKUP_PATH="/data/backups/$(hostname)"
LOG_FILE="/var/log/auto_clean.log"
# 检查磁盘使用率
usage=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ $usage -gt $THRESHOLD ]; then
echo "$(date): 磁盘使用率 $usage% 超过阈值,开始清理..." >> $LOG_FILE
# 查找大文件(大于100MB)
big_files=$(find /var/log /tmp -type f -size +100M 2>/dev/null | head -5)
for file in $big_files; do
if [ -f "$file" ]; then
# 备份到远程服务器
scp $file $BACKUP_USER@$BACKUP_SERVER:$BACKUP_PATH/ &&
# 清空原文件(保留文件结构)
> $file &&
echo "$(date): 已迁移并清空 $file" >> $LOG_FILE
fi
done
fi
2. 设置日志轮转防止磁盘爆满
# 配置logrotate自动管理日志
sudo vi /etc/logrotate.d/custom_logs
# 添加以下内容
/var/log/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
}
五、实用技巧和注意事项
1. 监控脚本优化建议
-
多级阈值告警:设置不同级别的阈值(如80%警告,90%紧急)
-
告警频率控制:避免频繁告警,可以设置告警间隔时间
-
日志记录:所有操作记录日志便于排查问题
-
进程锁机制:防止脚本重复执行
2. 安全注意事项
-
使用SSH密钥认证避免密码传输
-
定期更新脚本和检查监控有效性
-
设置适当的文件权限保护敏感信息
-
测试邮件发送功能确保告警可达
这个方案提供了从基础监控到高级自动化的完整解决方案,您可以根据实际需求进行调整和扩展。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 shaun
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果