2017-12-03 8 views
0

실행중인 다른 스크립트가 실행 중일 때 두 번째 실행되지 않도록 실행 스크립트를 잠그려고합니다. 여기에 내 코드,ruby ​​file locking error 솔라리스의 Errno :: EBADF

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

및 오류 아래지고, 루비 버전 1.9.3을 사용

# 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 --version 
ruby 1.9.3p551 (2014-11-13 revision 48407) [sparc-solaris2.11] 
# 

는하지만 리눅스 환경에서 완벽하게 작동합니다.

답변

0

해결책을 찾았습니다. 솔라리스에서는 읽기/쓰기 모드로 파일을 열어야 만 배타적 잠금이 발생합니다.

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