业务场景
应用程序之间以文件作为接口,为了简化设计,没有采用单独的文件传输模块,而是采用共用nfs服务器的方式由系统层面自动完成文件的上传下载.但是,在维护阶段却经常发生nfs无法连接的问题,导致应用程序io报错,影响到了业务的正常推进.
原因分析
1>客户端维护人员不知道的情况下,nfs server所在的服务器进行了重新启动,导致原来的挂接点无法访问nfs server,需要重新mount
2>nfs client端主机重新启动,没有自动mount或者mount失败,导致应用程序报错
3>网络故障导致nfs连接不可用
采取的对策
通过shell程序定时自动检测nfs mount的情况
程序实现
平时手动确认nfs的时候,用的是df命令,如果nfs连接有问题,因为是同步IO,所以df会卡死到那里等待,直到nfs连接可用为止才会返回,所以这次程序实现上,也是通过df命令的执行情况来判断nfs是否正常,不过需要通过两个进程来实现,如果一个进程的话,一旦df命令卡死到那里,整个程序就卡到那里不动了,所以需要两个shell程序.
1.主shell程序
调用子shell程序,让子shell程序在后台执行
sleep 30秒,然后通过pid来检测子shell进程是否已经退出
如果子进程还在,那么说明nfs连接出现异常,返回异常 exit 2,
注意:这里没有kill子shell进程,如果nfs mount成功,df会成功返回,子进程会自动退出,当然也可以手动kill掉