我想用Monit监视NFS挂载和NFS服务器进程。
在服务器上,我需要一个PID文件,但似乎无法find用现有configuration文件创build的方法。 有没有办法做到这一点,或有任何人以不同的方式监控服务器(检查端口53是否处于活动状态等)。
在客户端,我想让Monit简单地在NFS挂载中查找一个特定的文件,如果可以访问的话,一切都很好。 问题是,如果NFS服务器停止运行,文件请求通常会挂起(甚至可能无限期地,不确定)。 如何用monit来解决这个问题?
任何configuration示例将不胜感激!
至于在NFS服务器故障期间Monit进程的“悬挂”,这可以通过两种方法来绕开。
hard更改为soft ,这会导致NFS层在重新尝试重新发送访问应用程序时发出I / O错误。 由于这可能会导致其他数据完整性方面的问题(您的编写应用程序需要能够处理I / O错误,或者至less干脆退出,而不会破坏写入的文件),您也可以尝试: 希望这可以帮助!
你有没有检查nfs的init脚本? 我怀疑他们正在创build一个pid文件,并将其粘在某处,以便将来重新启动或停止操作。 如果没有,修改它们应该很简单。
至于检查挂载去看看http://nfs.sourceforge.net/nfs-howto/ar01s04.html#mounting_remote_dirs第4.3.1部分。 如果使用“软”选项安装它,您将获得允许监视它的行为,但不应该将其用于实际安装。 也许你想要第二个安装只是为了监测?
一般的做法是(假设没有任何Monit内置规则是适用的)
让Monittesting这些脚本(例如来自官方文档 ):
check program myscript with path "/usr/local/bin/myscript.sh" if status != 0 then alert
对于具体的问题,这可能意味着
服务器:这可能取决于您的操作系统,Linux发行版,NFS 3或4等,但它应该很容易弄清楚。 例如在Ubuntu 12.04上,我会testingNFS服务器是否正在运行
$ service portmap status $ service nfs-kernel-server status
如果两个命令都返回“running”,则创build一个返回0的shell脚本。
客户端:为了检查某个NFS共享是否已经挂载,我主要使用df -h。 所以相应的shell脚本看起来就像
#! /bin/bash df -h | grep -q thesharename