«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

VIDEOCUBE

flock 사용법 (스크립트 잠금 기능) 본문

명령어

flock 사용법 (스크립트 잠금 기능)

라떼청년 2017. 12. 14. 05:37

linux 에서 flock 사용법은 동시에 두개 이상의 실행을 하지 않도록 파일에 Lock 설정을 할 수 있다.

crontab 에 스크립트를 이용하여 지정된 시간에 동작하게 끔 등록을 하는데 일정한 주기 안에 해당 스크립트가 완료가 되지 않아 진행 중인 스크립트에 동일한 스크립트를 실행 시켜 원치 않은 작업 결과를 내곤 한다.

-- [ 예시 ] --

* * * * * flock -n /tmp/test.lock ./{Script}

-- [ Help ] --

Usage:

 flock [-sxun][-w #] fd#

 flock [-sxon][-w #] file [-c] command...

 flock [-sxon][-w #] directory [-c] command...

 

Options:

 -s  --shared     Get a shared lock

 -x  --exclusive  Get an exclusive lock

 -u  --unlock     Remove a lock

 -n  --nonblock   Fail rather than wait ( 대기가 아닌 실패 )

 -w  --timeout    Wait for a limited amount of time ( 일정 시간 대기 )

 -o  --close      Close file descriptor before running command

 -c  --command    Run a single command string through the shell

 -h  --help       Display this text

 -V  --version    Display version

 
 
옵션 [ -s ] 을 이용하는 경우
flock 으로 동작 중인 스크립트가 존재하면 해당 Lock 파일과 공유 하게 된다.
flock -s /tmp/test.lock {1번 Script} 으로 실행하고 있는 스크립트에 
flock -s /tmp/test.lock {2번 Script} 를 실행하면 동작 한다.
이럴 경우 1번 Script, 2번 Script 가 모두 종료되어야 잠금이 해제 된다.
 
 
옵션 [ -x ] 을 이용하는 경우
flock -x /tmp/test.lock {1번 Script} 로 실행을 하면,
flock -s /tmp/test.lock {2번 Script} 대기상태로 ( 이전 1번 Script 가 종료되기 전까지 대기 상태가 된다.)
 
 
옵션 [ -u ] 을 이용하는 경우
flock -x /tmp/test.lock {1번 Script} 로 실행을 하면, 2번 스크립트는 1번 스크립트가 종료되기 전까지 대기상태가 된다.
해당 1번 스크립트 상태를 무효화 시킬 수 있다, flock -u /tmp/test.lock {2번 Script} 를 하면 된다.
 
 
옵션 [ -n ] 을 이용하는 경우
flock 으로 동작 중인 스크립트가 존재하면 또 다른 flock 으로 스크립트를 실행할 때  실패로 종료된다.
 flock -n /tmp/test.lock {1번 Script}  ==> 동작
 flock -n /tmp/test.lock {2번 Script}  ==> 실패
 
옵션 [ -w ] 을 이용하는 경우
flock 으로 동작 중인 스크립트가 존재하면 또 다른 flock 으로 스크립트를 실행할 때  일정 시간 대기 상태를 가지고 대기시간이 지나면 종료 대기시간 동안 이전 작업이 완료가 되면 바로 실행 하도록 한다.
 
두개의 쉘을 띄워놓고 한쪽에는 무한 While Script 를 flock -n /tmp/test.lock {Script} 로 실행을 한 상태에서 
flock -w 10 /tmp/test.lock 을 하면 대기 상태가 된다.
이전 쉘에서 Control-C 를 눌러 인터럽트를 걸면, 대기중인 Script 가 실행되는 것을 확인 할 수 있다.
 
 

옵션을 복합적으로 이용하는 경우

다음과 같이 flock 을 복합적으로 사용하는 경우
다음 세로표로 실행 또는 대기 종료 여부를 표로 작성했습니다.
 
예를 들면)
flock -x /tmp/test.lock {1번 Script} 로 실행을 하면,
flock -s /tmp/test.lock {2번 Script} 대기상태로
 
( 이전 1번 Script 가 종료되기 전까지 대기 상태가 된다.)
 
- 가로가 우선 실행 기준입니다.
   s  x  u  n  w ( 10 )  o
 s 실행 실행/대기  실행 실행/대기  실행/대기  실행/대기
 x  실행/대기  실행/대기 실행 실행/대기  실행/대기  실행/대기
 u  실행 실행 실행 실행  실행  실행
 n 실행/종료   실행/종료 실행 실행/종료  실행/종료  실행/종료 
 w ( 10 )  실행/대기->종료 실행/대기->종료  실행 실행/대기->종료  실행/대기->종료  실행/대기->종료
 o  실행/대기  실행/대기 실행 실행/대기   실행/대기  실행/대기

 

-c , -o 옵션은 댓글에 도움을 주셨습니다. 감사드립니다.

 

반응형

'명령어' 카테고리의 다른 글

top 사용법  (0) 2019.01.15
TCPDump 사용법  (0) 2017.12.12
Comments