gpt4 book ai didi

perl - 打印或死亡 : how to check if a GPFS network mounted file is available

转载 作者:行者123 更新时间:2023-12-03 05:32:08 28 4
gpt4 key购买 nike

我有一个 Perl 脚本,用于写入位于 GPFS 网络安装存储点上的文件。有一个标准检查open FILE or die $!

文件系统宕机,但脚本没有退出;它一直在努力写作。文件系统恢复后,Perl 脚本完成。如何检查文件系统是否可以写入,如果不能写入则die

我问这个问题的原因是因为我的 Perl 脚本的最后一行删除了文件的 .tmp 扩展名。这个语句不应该被达到,因为在某一时刻脚本的输出没有到达任何地方。 GPFS 在写入点上已关闭,但读取点仍在运行。

最佳答案

print 有一个返回码。大多数人都懒得去检查。但它确实有一个。

http://perldoc.perl.org/functions/print.html

print Prints a string or a list of strings. Returns true if successful.

所以,是的,你可以“打印或死亡”。但您确实需要确保正确地将其括起来,以便“或”与正确的表达式相关联。

print 0 || warn "1 failed";
print 0 or warn "2 failed";

这将给出两个不同的结果,因为前者“测试”零。后者测试 print。如果您将打印内容括起来,那么这并不重要,为了清晰起见,这可能是可取的。

所以如果测试 - 你可以这样做:

open ( my $fh, "<", "bad_open" ); #opens read only, so prints will fail. 

print {$fh} 0,1,2 || warn "1 failed";
print {$fh} 1,2,3 or warn "2 failed";

(我本来打算建议 autodie 但遗憾的是它没有应用于 print。)

或者,查看 GPFS 的联机帮助页:

http://www-01.ibm.com/support/knowledgecenter/SSFKCN_3.5.0/com.ibm.cluster.gpfs.v3r5.gpfs100.doc/bl1adm_gsmo.htm

我可以建议检查您的安装选项吗?您的客户端上是否安装了 GPFS NFS?

看了一下,GPFS并不支持像NFS那样的挂载。根据设计,挂载将因暂时性错误而导致写入失败,而挂载将在挂载离线时阻塞。

hard 是默认值,因为这样可以避免数据损坏 - 任何写入操作都会阻塞,直到安装恢复。它看起来像是悬挂,这是不受欢迎的,但请记住,它极大地提高了数据完整性。

我不知道是否有一个简单的测试来测试脚本中的“停滞”硬安装。如果您通过 NFS 网络挂载 GPFS,您可能会发现只需将其挂载为即可(也许使用单独的挂载点并挂载两次,如果这会影响其他挂载点)。

关于perl - 打印或死亡 : how to check if a GPFS network mounted file is available,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28487318/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com