setlock을 사용하여 다중 시동 방지 기능을 간단하게 실현하다

5617 단어 LinuxCentOS
만두의 수요로 인해 때때로cron을 사용하여 정기적으로 실행되는 스크립트에 다중 작동을 방지하는 기능을 설치하고 싶습니다.
이때 회사 선배는 setlock 이 데몬툴스에 첨부된 스크립트를 사용하면 잠금 파일을 사용하여 다중 시작 방지 기능을 간단하게 설치할 수 있기 때문에 사용 방법의 노트를 남길 수 있다고 알려주었다.
  • cr.yp.to/daemontools/setlock.html
  • The setlock program(↑ 위 사이트의 일본어판)
  • 예제 코드의 실행 환경은 CentOS6.5입니다.

    견본


    예를 들어 sleeping.rb, 10초 sleep "wake up!"간단한 스크립트입니다.
    sleeping.rb
    sleep 10
    puts "wake up!"
    
    setlock을 사용하면sleeping입니다.rb의 다중 시동을 방지할 수 있습니다.
    /var/lock/vagrant에 쓰기 및 읽기 권한이 있는 경우)
    $ setlock -Xn /var/lock/vagrant/sleeping.lock ruby sleeping.rb
    
    이 때 다른 알림을 시작하는 등 같은 명령으로 sleeping합니다.rb를 계속 시작할 때 다음 오류를 토하고 스크립트가 끝납니다.
    $ setlock -Xn /var/lock/vagrant/sleeping.lock ruby sleeping.rb
    setlock: fatal: unable to lock /var/lock/sleeping.lock: temporary failure
    
    또한 N 옵션을 사용하면 스크립트를 즉시 끝내지 않고 시작 중인 과정이 끝난 후에 실행할 수 있습니다.
    $ setlock -XN /var/lock/vagrant/sleeping.lock ruby sleeping.rb
    # (現在起動中のスクリプトが終了するのを待ってから実行される)
    wake up!
    

    구조


    setlock은 첫 번째 매개 변수에 지정된 파일을 잠그고 다음 매개 변수에 지정된 명령의 시작을 제어하는 기능을 간단하게 제공합니다.
    위의 견본에서 잠금 /var/lock/vagrant/sleeping.lock, 이 파일이 잠긴 동안 실행하지 않음 ruby sleeping.rb (또는 실행을 기다림).
    따라서 setlock 제1 매개 변수에서 지정한 잠금 파일이 다르면sleeping.rb가 다중으로 시작됩니다.
    이 상황에서는 슬리핑입니다.rb 다중 부팅
    # /var/lock/vagrant/sleeping.lockを使う
    $ setlock -Xn /var/lock/vagrant/sleeping.lock ruby sleeping.rb
    
    # /var/lock/vagrant/sleeping.lock2を使う
    $ setlock -Xn /var/lock/vagrant/sleeping.lock2 ruby sleeping.rb
    
    이번에는 cron이 정기적으로 실행하는 스크립트에 다중 시작 방지 기능을 설치하고 싶어서 setlock이 매우 편리합니다.

    setlock 옵션


    네 가지 옵션만 있음
    탭 페이지에서 항목 작성 또는 편집
    함의
    -n
    지정한 파일이 잠겼을 때 명령 실행을 포기하고 종료합니다
    -N
    기본 옵션입니다.지정한 파일이 잠겨 있으면 새 파일을 잠글 수 있을 때까지 기다립니다
    -x
    파일을 잠글 수 없거나 만들 수 없는 경우 코드 0으로 종료
    -X
    기본 옵션입니다.파일을 잠글 수 없거나 생성할 수 없는 경우 0야드가 아닌 오류 메시지가 표시됩니다.
    나는 어떤 옵션을 사용하느냐가 스크립트의 요구에 달려 있다고 생각한다.
    자신의 상황에서 잠긴 상태에서 0이 아닌 것으로 끝났습니다. 다음cron이 실행되기를 기다리고 싶어서 "-Xn"옵션을 사용했습니다.

    느끼다


    setlock의 존재를 모르고 코드를 쓸 때 실행된 스크립트에'자물쇠 파일 만들기, 배타적 자물쇠 추가, 자물쇠가 잠긴 상태에서 오류 메시지 뱉기 끝'이라는 비본질적인 처리가 포함되어 코드의 전망이 나빠졌다.
    setlock을 사용하여 실행 스크립트에서 본질적인 처리만 기술하고 잠금 처리는 코드 밖(명령줄)을 놓칠 수 있기 때문에 코드가 깔끔하고 좋습니다. 다중 시동 방지 기능 자체도 스스로 설치하지 않고 시든 기술인 데몬툴스에 맡길 수 있어 안심할 수 있습니다.

    [참고] 데몬툴스의 설치


    참고로 본고는 데몬툴스의 설치 방법(setlock은 데몬툴스에 포함됨)을 소개했다.
    yum은 설치할 수 없을 것 같아서 원본에서 설치합니다.
    cr.yp.to/daemontools/install.html의 설치 절차를 참조하십시오.
    $ sudo su -
    $ yum install wget
    
    # /packageディレクトリの作成と移動
    $ mkdir -p /package
    $ chmod 1755 /package
    $ cd /package
    
    # daemontoolsのソースを取得
    $ wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
    $ tar -xpf daemontools-0.76.tar.gz
    $ rm -f daemontools-0.76.tar.gz
    $ cd admin/daemontools-0.76/
    
    # パッチを当てる
    $ wget http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/daemontools-0.76.errno.patch
    # 接続できない場合コチラなら繋がるかも => http://djbware.csi.hu/patches/daemontools-0.76.errno.patch
    $ patch -p1 < daemontools-0.76.errno.patch
    
    # インストール
    $ package/install
    
    설치 확인 도움말 보기
    $ setlock --h
    setlock: usage: setlock [ -nNxX ] file program [ arg ... ]
    

    좋은 웹페이지 즐겨찾기