[Linux] flock 스크립트 잠금 기능 - crontab 중복실행 방지

728x90

리눅스에서 명령어 또는 crontab 에서 쉘 스크립트를 실행시킬 때 쉘 프로세스가 실행되어 있는 상태에서 똑같은 스크립트가 실행되게 되면 성능적으로 또는 프로세스에 문제가 발생하는 경우가 있습니다. 그럴 경우를 대비해 미리 예방할 수 있는 방법에 대해서 알려드리겠습니다.

linux 에서 flock를 통해 동시에 두개 이상의 스크립트 파일이 실행을 하지 않도록 파일에 Lock 설정을 할 수 있다.

flock은 file lock 을 줄여놓은 명령어입니다.

 

명령어(Usage)

* * * * * flock [Option] ./{Script}

 


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 [1번 Script] 으로 실행하고 있는 스크립트에
flock -s [2번 Script] 를 실행하면 동작 한다.
이럴 경우 1번 Script, 2번 Script 가 모두 종료되어야 flock가 해제됩니다.

옵션 [ -x ]
flock -x [1번 Script] 로 실행을 하면,
flock -s [2번 Script] 대기상태로 ( 이전 1번 Script 가 종료되기 전까지 대기 상태가 된다.)

옵션 [ -u ]
flock -x [1번 Script] 로 실행을 하면, 2번 스크립트는 1번 스크립트가 종료되기 전까지 대기상태가 된다.
해당 1번 스크립트 상태를 무효화 시킬 수 있다, flock -u /tmp/test.lock {2번 Script} 를 하면 된다.

옵션 [ -n ]
flock 으로 동작 중인 스크립트가 존재하면 또 다른 flock 으로 스크립트를 실행할 때 실패로 종료된다.
flock -n [1번 Script] ==> 동작
flock -n [2번 Script] ==> 실패

옵션 [ -w ]
flock 으로 동작 중인 스크립트가 존재하면 또 다른 flock 으로 스크립트를 실행할 때 일정 시간 대기 상태를 가지고 대기시간이 지나면 종료 대기시간 동안 이전 작업이 완료가 되면 바로 실행 하도록 한다.
flock -w 10 [Script] 을 하면 대기 상태가 된다.

댓글

Designed by JB FACTORY