2017-12-03 7 views
0

実行可能なスクリプトをロックして、別のプロセスが実行されているときにもう一度実行されないようにしようとしていますか?ここに私のコードは、ruby​​ファイルのロックエラーsolarisのErrno :: EBADF

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

は、

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

しかし、その作業を完璧にRubyのバージョン1.9.3を使用しています。

答えて

0

解決策が見つかりました。 Solarisでは、読み込み/書き込みモードでファイルを開く必要があり、排他ロックが発生します。

if $0 == __FILE__ 
    if File.new(__FILE__, 'r+').flock(File::LOCK_EX | File::LOCK_NB) 
    main() 
    end 
end 
関連する問題