如何使用bash了解共享磁盘中的文件是否正在被另一个Linux实例使用



我需要知道是否有一种方法可以知道共享磁盘中的文件是否正在被另一个Linux实例使用。

我有2台Linux机器共享一个磁盘。每次随机时间,当分析过程完成时,第一台机器将一个结果文件(具有连续的文件名)写入共享磁盘。

在另一台机器上,我有一个bash脚本验证文件是否已经在第一台机器上完成。

我现在验证的方法是在bash脚本中的for循环中运行stat命令,以了解文件的最后修改日期是否在机器的当前日期之后。如果这是真的,我可以处理文件。如果没有,我运行一个sleep,然后再运行stat。 那么,有什么方法可以避免这种情况,并知道共享磁盘中的文件是否正在被另一台机器使用?或者等待完成文件的最佳方式是什么?

将结果文件以临时名称写入同一目录。只有在关闭临时名称下的文件后才将其重命名为最终名称,以确保刷新内容。因此,如果文件以其最终名称存在,则保证它是完整的。

需要放在同一个目录中,因为NFS重命名只保证在单个目录中是原子的(而在非NFS场景中,同一文件系统上的任何位置都可以工作)。

您可以尝试使用flock,如下所示:如何防止脚本同时运行?还有其他同步文件访问的方法(lockfile, mkdir,仅举几例)。一个简单的谷歌搜索应该给你你所需要的。我不能100%确定这是否适合您的设置与共享磁盘。

和比较日期的方法差不多:

获取两次文件大小并比较

STAT1=`du [FILE] | awk '{print $1}'`;
STAT2=`du [FILE] | awk '{print $1}'`;
[ $STAT1 -ne $STAT2 ] 
    && echo "writing to..." 
    || echo "FINISHED"

如果您希望有大量的I/O和iowait,请在两个STATS之间设置一个睡眠1

最新更新