#!/bin/bash
mountpoint='your mountpoint'
mobileno=""
smsurl=""
mntcmd='/bin/mount -a'
mntchkcmd='/bin/mount'
###Check mount point available or not IF not alert to service own
${mntchkcmd} | /bin/grep ${mountpoint} > /dev/null 2>&1
if [ $? != 0 ]
then
${mntcmd}
sleep 5
${mntchkcmd} | /bin/grep ${mountpoint} > /dev/null 2>&1
if [ $? != 0 ]
then
echo "issue with mount point"
exit
fi
fi
###If mount point is available then check it for utilisation.
warn=90
critical=95
disksize=$(/bin/df -k ${mountpoint} | /bin/grep ${mountpoint} | /bin/awk -F% '{print $1}' | /bin/awk '{print $4}')
if [ ${disksize} -gt ${warn} ]
then
echo 'warn'
elif [ ${disksize} -gt ${critical} ]
then
echo 'critical'
fi
如果可能,设置自动挂载 ( autofs ) 将是执行此操作的标准方法。它可能已经在您的发行版中(CentOS / Redhat 默认安装附带)。 这是一个教程。
为什么要使用自动挂载?
你能grep
/etc/mtab
设备吗?grep -c '/mnt/foo' /etc/mtab
如果 grep 输出 '1' 则 /mnt/foo 已安装。使用
mountpoint
.(我不知道它有多广泛或可移植
mountpoint
;它是由我的 Debian 服务器上的 initscripts 包提供的。)在 solaris 中
如果您检查运行脚本的系统是否安装了远程文件系统,那么
*mountcommand 可以是 /usr/sbin/mount /path/to/mount 如果 /etc/vfstab 或 /usr/sbin/mount remotehost:/remote/path /path/to/mount 中有相应的条目
你也许可以用 stat 做一些事情。“设备”字段在不同的文件系统中会有所不同。因此,假设您想查看是否
/mnt/foo
已安装,您将比较stat -c%d /mnt/
to的输出stat -c%d /mnt/foo/
。如果设备不同,则在那里安装了一些东西。归根结底,Shell 编程是关于使用管道将小型离散工具插入在一起以产生某种复合实用程序。以“智能”方式完成您所要求的实用程序不会真正符合 Unix 哲学。
如果您想更智能地执行此操作,您可能需要考虑在 Perl、Python 或 C 中执行此操作,您可以在其中使用库函数与端口映射器通信,以获取有关作为数据结构安装的文件系统的信息。然后,您可以智能地执行任务以将当前状态更改为您想要的状态。
只是为了抛出另一个想法, df 命令可以告诉您目录的挂载文件系统。如果您输入该
-l
选项,您将获得一个非常简单的测试,以查看目录是否在本地文件系统上。$ cd /net/remoteshare
$ df -l .
df: no file systems processed
$ echo $?
1
几点建议:
如果您的发行版有一个 RC 脚本来处理 NFS 挂载,那么谨慎使用或检查它的状态。如果您错误地假设 和 等服务已经启动,您可能会遇到
portmap
麻烦statd
。它通常更可靠地用于
/proc/mounts
支持.mount
/etc/mtab
使用
grep -qs
并检查返回代码以确定是否存在安装。假设
/etc/fstab
应该挂载中列出的所有 NFS 挂载,那么您可以使用mount -a -t nfs,nfs4
. 任何已经安装的东西都将被忽略。