我有一个仅在成功完成几个测试后才能启动的过程。
我需要进行的一项测试是,我所有的NFS挂载均正常运行。
我能做得比蛮力方法更好吗:
mount | sed -n "s/^.* on \(.*\) type nfs .*$/\1/p" | while read mount_point ; do timeout 10 ls $mount_point >& /dev/null || echo "stale $mount_point" ; done
这timeout是一个实用程序,它将在后台运行命令,并在给定时间后将其杀死(如果SIGCHLD在时间限制之前未捕获到该命令),则以明显的方式返回成功/失败。
timeout
SIGCHLD
用英语:解析输出mount,检查每个NFS安装点(有一个超时)。可选地(不在上面的代码中)在第一个陈旧的挂载上中断。
mount
您可以编写一个C程序并检查ESTALE。
ESTALE
#include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <iso646.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> int main(){ struct stat st; int ret; ret = stat("/mnt/some_stale", &st); if(ret == -1 and errno == ESTALE){ printf("/mnt/some_stale is stale\n"); return EXIT_SUCCESS; } else { return EXIT_FAILURE; } }