ruby文件锁定错误Errno :: EBADF在solaris中

时间:2017-12-03 05:55:15

标签: ruby flock

我试图锁定一个可执行脚本,以确保在另一个进程正在运行时它不会第二次运行。这是我的代码,

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

并低于错误,

# ruby /tmp/test.rb
/tmp/test.rb:397:in `flock': Bad file number - /tmp/test.rb (Errno::EBADF)
        from /tmp/test.rb:397:in `<main>'
#

使用ruby版本1.9.3,

# ruby --version
ruby 1.9.3p551 (2014-11-13 revision 48407) [sparc-solaris2.11]
#

但它在Linux环境中运行良好。

1 个答案:

答案 0 :(得分:0)

找到解决方案。在Solaris中,我们需要使用读/写模式打开文件,然后才会发生排它锁。

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