bio*_*ris 3 filesystems perl networking system
我有一个Perl脚本写入位于GPFS网络安装存储点的文件.有一个标准检查open FILE or die $!.
文件系统崩溃了,但脚本没有退出; 它一直在努力写作.文件系统恢复后,Perl脚本完成.如何检查文件系统是否可以写入,die如果不能写入?
我问这个的原因是因为我的Perl脚本的最后一行删除了文件的.tmp扩展名.永远不应该达到这种说法,因为在某一时刻,脚本的输出不会到达任何地方.GPFS在写入点上有所下降,但读取点仍在上升.
print有一个返回码.大多数人都懒得检查它.但确实有一个.
http://perldoc.perl.org/functions/print.html
print打印字符串或字符串列表.如果成功则返回true.
所以是的,你可以做'打印或死'.但是你确实需要确保正确地括起来,所以'或'与正确的表达相关联.
print 0 || warn "1 failed";
print 0 or warn "2 failed";
Run Code Online (Sandbox Code Playgroud)
这将给出两个不同的结果,因为前者'测试'为零.后者测试的地方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";
Run Code Online (Sandbox Code Playgroud)
(我打算建议,autodie但遗憾的是它不适用于print.)
或者,查看GPFS的联机帮助页:
我可以建议检查您的挂载选项吗?您的GPFS NFS是否已安装在您的客户端上?
看一下,GPFS不支持soft像NFS一样安装.按照设计,soft挂载将在瞬态错误上写入失败,其中hard挂载将在挂载脱机时阻塞.
hard是默认值,因为这样可以避免数据损坏 - 在挂载恢复之前,任何写入操作都会阻塞.它看起来像是hanging不可取的,但请记住它大大提高了数据的完整性.
我不知道是否有一个简单的测试来自脚本内的'停滞'硬盘.如果您通过NFS网络安装GPFS,您可能会发现可以简单地安装它soft(可能使用单独的安装点,如果这会影响其他安装点,则安装两次).