如何编写Shell脚本监控CentOS 6.5挂载并记录异常?
Hey there! 作为Shell脚本新手,你这个挂载监控的需求其实挺常见的,既有现成的成熟工具可以直接用,也能自己写个简单脚本搞定,我给你分两种情况详细说说:
如果你想快速实现功能,不想折腾写代码,那monit绝对是个好选择——它是轻量级的系统监控工具,专门用来盯挂载点、进程、文件系统这些,配置起来也不复杂。
操作步骤大概是这样:
- 先安装monit:CentOS 6.5直接用yum装就行,执行
yum install monit - 配置监控规则:你可以编辑主配置文件
/etc/monit.conf,或者在/etc/monit.d/目录下新建一个专门的配置文件(比如mount_check.conf),每个挂载点的配置大概长这样:
check filesystem point1 with path /mnt/point1
if not mounted then alert
on alert exec "/bin/echo '[$(date "+%Y-%m-%d %H:%M:%S")] 挂载点/mnt/point1未正常挂载' >> /var/log/mount_monitor.log"
check filesystem point2 with path /mnt/point2
if not mounted then alert
on alert exec "/bin/echo '[$(date "+%Y-%m-%d %H:%M:%S")] 挂载点/mnt/point2未正常挂载' >> /var/log/mount_monitor.log"剩下7个挂载点照着上面的格式复制修改就行
- 启动并设置开机自启:
service monit start,然后chkconfig monit on
monit会自动周期性检查,一旦挂载点出问题就自动把日志写到你指定的文件里,省心又靠谱。
要是你想借着这个机会学点Shell脚本知识,那自己写个脚本也不难,逻辑很简单:遍历9个挂载点,逐个检查是否正常挂载,异常就记录日志。
给你写个示例脚本,你可以直接改了用:
#!/bin/bash # 定义要监控的9个挂载点,把这里的路径换成你实际的挂载点 MONITOR_POINTS=(/mnt/disk1 /mnt/disk2 /mnt/disk3 /mnt/disk4 /mnt/disk5 /mnt/disk6 /mnt/disk7 /mnt/disk8 /mnt/disk9) # 日志文件的保存路径,确保脚本有写入权限 LOG_PATH="/var/log/mount_status.log" # 获取当前时间,用来标记日志时间戳 NOW=$(date "+%Y-%m-%d %H:%M:%S") # 逐个检查挂载点 for point in "${MONITOR_POINTS[@]}" do # 用mount命令检查这个挂载点是否存在 if ! mount | grep -q "^.* ${point} "; then # 异常信息写入日志 echo "[${NOW}] 警告:挂载点 ${point} 未正常挂载!" >> ${LOG_PATH} fi # 可选:额外检查磁盘使用率,比如超过90%就记录 # 注意:如果挂载点没挂载,这行可能会报错,所以可以加个判断 if mount | grep -q "^.* ${point} "; then USAGE=$(df -h ${point} | awk 'NR==2 {print $5}' | sed 's/%//') if [ ${USAGE} -gt 90 ]; then echo "[${NOW}] 警告:挂载点 ${point} 磁盘使用率过高,当前为 ${USAGE}%" >> ${LOG_PATH} fi fi done
脚本使用方法:
- 把上面的代码保存成文件,比如
mount_monitor.sh - 给脚本加执行权限:
chmod +x mount_monitor.sh - 测试运行:
./mount_monitor.sh,看看日志文件里有没有内容 - 设置定时自动执行:用crontab实现周期性检查,比如每分钟检查一次:
- 执行
crontab -e打开定时任务编辑界面 - 添加一行:
* * * * * /root/mount_monitor.sh(这里换成你脚本的实际路径) - 保存退出就行,crontab会自动生效
- 执行
新手注意点:
- 挂载点路径一定要写对,别写错了导致监控失效
- 日志文件路径要确保脚本有写入权限,比如可以先执行
touch /var/log/mount_status.log再给权限chmod 664 /var/log/mount_status.log - 如果不需要磁盘使用率检查,把那部分代码删掉就行
如果追求快速稳定,直接用monit这类工具最省心;如果想学习Shell脚本,自己写这个简单脚本完全够用,还能顺便掌握循环、条件判断、命令组合这些基础知识点~
内容的提问来源于stack exchange,提问作者Daniel Cox

