【发布时间】:2023-03-27 09:09:02
【问题描述】:
我正在运行一个执行各种操作的 bash 脚本:读取文件、写入文件、从键盘获取输入、执行外部(非 bash)代码等。我注意到即使使用相同的输入,结果也是并不总是一致的。非常简洁,想象一下如果下面的代码(在实践中要复杂得多):
echo "1 2 3" > file
awk '{printf "%.2f\n", $1}' file
有时会打印出正确的结果,即1.00,有时会打印出0.00。我相信这是因为硬盘驱动器上的文件更新速度不够快。我在科学集群前端运行这个脚本,它并不总是表现顺利,即在打印目录等之前输入ls 时有时会滞后(这是因为一些 d***heads 在其上运行他们的 Matlab 脚本,但那是另一回事了……)。
我的问题是:如何确保由我的脚本动态编写的所有文件都可用于最新版本的同一脚本?也就是说,我想确保在echo "1 2 3" > file 之后立即执行的命令将看到file 有效地包含1 2 3,无论它之前包含的内容是否存在。
【问题讨论】:
-
你有任何子进程/任何东西同时运行吗?我认为仅凭您提供的代码,您的具体示例是不可能的。
-
没有其他运行。我不明白你所说的“我的具体例子是不可能的”是什么意思。
-
运行它的工作目录是什么类型的文件系统? NFS?集群文件系统之一?分布式文件系统?
-
这种行为会破坏很多程序,通常不会发生。更可能的问题是: 1. 在不同的线程或机器上运行不同的步骤,或者针对不同的挂载点。 2. 代码中的错误。
-
@twalberg:我们的集群手册说:“所有计算节点和前端都连接到 DDN SFA10k 存储系统:在 /triton 目录下交叉挂载 Lustre 文件系统的大型磁盘阵列. 该系统为最终用户提供了大约 430TB 的可用磁盘空间。”我对文件系统了解不多,但是这个“交叉安装”的东西可能是原因吗?
标签: bash filesystems cluster-computing