2017-12-03 43 views
0

我試圖鎖定一個可執行腳本,以確保它在第二次運行時不會運行。這裏是我的代碼,紅寶石文件鎖定錯誤Errno :: EBADF在solaris

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>' 
# 

現在用紅寶石版本1.9.3,

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

但其在Linux環境中工作的完善。

回答

0

找到解決方案。在Solaris中,我們需要以讀/寫模式打開文件,然後纔會發生排它鎖。

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