【问题标题】:ruby file locking error Errno::EBADF in solarisruby 文件锁定错误 Errno::EBADF 在 solaris
【发布时间】:2017-12-03 05:55:14
【问题描述】:

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

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 环境中运行完美。

【问题讨论】:

    标签: ruby flock


    【解决方案1】:

    找到了解决办法。在 Solaris 中,我们需要以读/写模式打开文件,然后才会发生排他锁。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2018-12-21
      • 1970-01-01
      • 2019-09-12
      • 1970-01-01
      • 2017-12-06
      相关资源
      最近更新 更多