Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用nfs锁定ruby文件以运行脚本的单个实例_Ruby - Fatal编程技术网

使用nfs锁定ruby文件以运行脚本的单个实例

使用nfs锁定ruby文件以运行脚本的单个实例,ruby,Ruby,我已经实现了文件锁定机制,以避免在我使用的方法下使用相同的脚本名运行多个进程 def main() # stufss end if $0 == __FILE__ if File.new(__FILE__).flock(File::LOCK_NB | File::LOCK_EX) main end end __END__ 当我将脚本放在本地磁盘上时,它可以正常工作,但当文件位于NFS挂载的文件系统上并且出现以下错误时,它就不工作了 test.rb:64:in `flock'

我已经实现了文件锁定机制,以避免在我使用的方法下使用相同的脚本名运行多个进程

def main()
 # stufss
end

if $0 == __FILE__
  if File.new(__FILE__).flock(File::LOCK_NB | File::LOCK_EX)
    main
  end
end

__END__
当我将脚本放在本地磁盘上时,它可以正常工作,但当文件位于NFS挂载的文件系统上并且出现以下错误时,它就不工作了

test.rb:64:in `flock': No locks available - test.rb (Errno::ENOLCK)
        from test.rb:64
难道不可能用相同的机制来实现这一点吗


注意:我使用的是ruby 1.8.7

只是一个注意:ruby 1.8非常古老,几乎四年来都不受支持(后续版本的可用期超过六年)。我建议尽快优先更新您的环境。使用这样一个旧版本可能是一个安全问题——至少它使您的工作更加困难,因为当前的博客文章和当前的gem版本将与您的旧软件堆栈不兼容。我建议至少升级到Ruby 2.2.x,因为现在是这样。@spickermann我完全同意。由于与RHEL5和6兼容,我现在想继续使用这个版本。是的,我们已经在准备使用最新版本Ruby的计划。但我正在寻找目前是否有任何可用的解决方案。RHEL5将在月底不受支持,RHEL6不再完全受支持,RHEL7将在近3年内可用。我建议更新您的整个环境。我有一个非常庞大的环境,大约50000多台服务器,包括RHEL5、6和7,所以这需要更多的时间。我正在寻找临时解决方案。不确定这可能意味着什么,但在文档中有一条注释:-并非在所有平台上都可用。。。现在这可能意味着NFS是一个不受支持的平台??