我需要帮助我正在尝试制作的两个脚本。有两种不同的方法可以检测是否存在错误的NFS挂载问题。一个是如果出现问题,那么df
会挂起而另一个是df
可以正常工作,但是find (mount name) -type -d
将会遇到其他问题。
我正在尝试将脚本组合起来,以便将问题都记录到运行find type -d
的位置,如果出现问题,则返回错误。如果发生第二个NFS问题并且查找挂起,请在2秒后终止查找命令;运行脚本的第二部分,如果发生NFS问题,则返回错误。如果没有发生任何类型的NFS问题,则返回OK。
MOUNTS="egrep -v '(^#)' /etc/fstab | grep nfs | awk '{print $2}'"
MOUNT_EXCLUDE=()
if [[ -z "${NFSdir}" ]] ; then
echo "Please define a mount point to be checked"
exit 3
fi
if [[ ! -d "${NFSdir}" ]] ; then
echo "NFS CRITICAL: mount point ${NFSdir} status: stale"
exit 2
fi
cat > "/tmp/.nfs" << EOF
#!/bin/sh
cd \$1 || { exit 2; }
exit 0;
EOF
chmod +x /tmp/.nfs
for i in ${NFSdir}; do
CHECK="ps -ef | grep "/tmp/.nfs $i" | grep -v grep | wc -l"
if [ $CHECK -gt 0 ]; then
echo "NFS CRITICAL : Stale NFS mount point $i"
exit $STATE_CRITICAL;
else
echo "NFS OK : NFS mount point $i status: healthy"
exit $STATE_OK;
fi
done
答案 0 :(得分:1)
如图所示,MOUNTS和MOUNT_EXCLUDE行对此脚本无关紧要。
您尚未明确确定${NFSdir}
的设置位置。
脚本的第一部分假设${NFSdir}
包含单个目录值;第二部分(循环)假设它可能包含多个值。也许这没关系,因为循环无条件地在第一次迭代时退出脚本,但它不是清晰,干净的写入方式。
您创建脚本/tmp/.nfs
但是:
/tmp/.nfs.$$
)来多次并发执行此脚本。/tmp
目录中的脚本隐藏到名称前面加.
前缀。这可能不是一个好主意。使用:
tmpcmd=${TMPDIR:-/tmp}/nfs.$$
trap "rm -f $tmpcmd; exit 1" 0 1 2 3 13 15
...rest of script - modified to use the generated script...
rm -f $tmpcmd
trap 0
这使您最有可能清理临时脚本。
脚本中没有df
,而问题暗示应该有一个。您还应该查看timeout
命令(尽管由于NFS没有响应而挂起的命令通常很难被杀死)。