您将如何制作 shell 脚本来监控挂载和记录问题?
How would you make a shell script to monitor mounts and log issues?
我正在寻找一种在 CentOS 6.5 机器上安装监视器和日志的好方法。由于我是 Linux shell 脚本编写的新手,所以我有点不知所措,不知道是否已经存在并证明我可以插入的东西,或者是否有一个好的方法我应该指导我的研究建立我自己的。
最后,我希望 运行ning 对服务器上的 9 个装载中的每一个进行检查,以确认它们已启动并正常工作。如果有问题,我想将信息记录到一个文件中,可能会通过电子邮件发送信息,并检查下一个装载。 5-10分钟后我想运行再来一遍。我知道这可能不是必需的,但如果存在问题或向供应商表明他们所说的问题不是问题,我们会尝试收集证据。
此 shell 脚本将测试每个挂载点并在其中任何一个未挂载时向 root 发送邮件:
#!/bin/bash
while sleep 10m;
do
status=$(for mnt in /mnt/disk1 /mnt/disk2 /mnt/disk3; do mountpoint -q "$mnt" || echo "$mnt missing"; done)
[ "$status" ] && echo "$status" | mail root -s "Missing mount"
done
我的目的不是提供完整的 turn-key 解决方案,而是为您的研究提供一个起点。
为使其准确满足您的需求,您需要了解 bash 和 shell 脚本、cron 作业以及 Unix 的其他非常有用的工具。
工作原理
#!/bin/bash
这表明这是一个 bash 脚本。
while sleep 10m; do
每 10 分钟重复一次循环中的命令。
status=$(for mnt in /mnt/disk1 /mnt/disk2 /mnt/disk3; do mountpoint -q "$mnt" || echo "$mnt missing"; done)
这会循环遍历挂载点 /mnt/disk1
、/mnt/disk2
和 /mnt/disk3
,并测试每个挂载点是否已挂载。如果不是,则创建一条消息并将其存储在 shell 变量 status
.
中
您需要将 /mnt/disk1 /mnt/disk2 /mnt/disk3
替换为您的挂载点列表,无论它们是什么。
这使用现代 linux 版本的标准命令 mountpoint
。它是 util-linux
包的一部分。它可能在旧安装中丢失。
[ "$status" ] && echo "$status" | mail root -s "Missing mount"
如果 status
包含任何消息,它们将以 Missing mount
.
的主题行邮寄给 root
mail
命令有几个不同的版本。您可能需要调整参数列表以适应您系统上的版本。
done
这标志着 while
循环的结束。
备注
以上脚本使用 while
循环,每十分钟 运行 进行一次测试。如果您熟悉 cron
系统,您可能希望使用它来 运行 每 10 分钟执行一次命令,而不是 while
循环。
我正在寻找一种在 CentOS 6.5 机器上安装监视器和日志的好方法。由于我是 Linux shell 脚本编写的新手,所以我有点不知所措,不知道是否已经存在并证明我可以插入的东西,或者是否有一个好的方法我应该指导我的研究建立我自己的。
最后,我希望 运行ning 对服务器上的 9 个装载中的每一个进行检查,以确认它们已启动并正常工作。如果有问题,我想将信息记录到一个文件中,可能会通过电子邮件发送信息,并检查下一个装载。 5-10分钟后我想运行再来一遍。我知道这可能不是必需的,但如果存在问题或向供应商表明他们所说的问题不是问题,我们会尝试收集证据。
此 shell 脚本将测试每个挂载点并在其中任何一个未挂载时向 root 发送邮件:
#!/bin/bash
while sleep 10m;
do
status=$(for mnt in /mnt/disk1 /mnt/disk2 /mnt/disk3; do mountpoint -q "$mnt" || echo "$mnt missing"; done)
[ "$status" ] && echo "$status" | mail root -s "Missing mount"
done
我的目的不是提供完整的 turn-key 解决方案,而是为您的研究提供一个起点。 为使其准确满足您的需求,您需要了解 bash 和 shell 脚本、cron 作业以及 Unix 的其他非常有用的工具。
工作原理
#!/bin/bash
这表明这是一个 bash 脚本。
while sleep 10m; do
每 10 分钟重复一次循环中的命令。
status=$(for mnt in /mnt/disk1 /mnt/disk2 /mnt/disk3; do mountpoint -q "$mnt" || echo "$mnt missing"; done)
这会循环遍历挂载点
中/mnt/disk1
、/mnt/disk2
和/mnt/disk3
,并测试每个挂载点是否已挂载。如果不是,则创建一条消息并将其存储在 shell 变量status
.您需要将
/mnt/disk1 /mnt/disk2 /mnt/disk3
替换为您的挂载点列表,无论它们是什么。这使用现代 linux 版本的标准命令
mountpoint
。它是util-linux
包的一部分。它可能在旧安装中丢失。[ "$status" ] && echo "$status" | mail root -s "Missing mount"
如果
的主题行邮寄给 rootstatus
包含任何消息,它们将以Missing mount
.mail
命令有几个不同的版本。您可能需要调整参数列表以适应您系统上的版本。done
这标志着
while
循环的结束。
备注
以上脚本使用 while
循环,每十分钟 运行 进行一次测试。如果您熟悉 cron
系统,您可能希望使用它来 运行 每 10 分钟执行一次命令,而不是 while
循环。