본문으로 바로가기
반응형

보통 서버에서 자동으로 작업을 수행하기 위해서는 crontab이나 데몬을 이용한다.

하지만 파일의 상태 변경에 따라 작업을 수행하기 위해서는 따로 코드를 작성해야 하는데 꽤 성가신 작업이다.

incrontab 을 사용하면 파일 혹은 디렉토리의 생성, 이동, 변경, 삭제 등 다양한 상황에 맞추어 정해진 스크립트를 실행하는 작업을 훨씬 편하게 할 수 있다.


한글 매뉴얼이 크게 필요하진 않지만 나중 참고를 위해 포스팅.

먼저 내 환경은 Debian Linux 8 이다. 


1. 설치


sudo apt-get install incron


2. 초기 설정

incron의 설정 파일은 /etc/incron.conf 이다. 특별히 만질 부분은 없다. 나는 Editor만 vim 으로 변경해 주었다.

다음은 /etc/incron.allow, /etc/incron.deny 파일을 수정해 준다. 파일명에서 유추할 수 있듯이 incron.allow에는 incron을 사용할 수 있도록 허용할 사용자 아이디를, incron.deny에는 incron을 사용할 수 없는 사용자 아이디를 입력하면 된다. 한줄에 하나씩.

root 계정만 사용할 수 있게 하려면 root만 입력하도록 하자.

나는 root 계정과 내 계정 두개를 allow 파일에 추가해 주었다.


3. 사용

기존 crontab 과 사용법은 거의 동일하다. 쉘에서 incrontab -e 를 입력하면 동작을 설정할 수 있다.

형식은 다음과 같다.


<감시할 디렉토리> <마스크 (스크립트 실행 조건)> <스크립트 경로> <파라미터로 넘길 정보>

예를 들어, /home/user/test 디렉토리를 감시하다가 파일이 해당 디렉토리로 이동될 경우 /home/user/doit.sh 가 실행되게 하고 싶다면 다음과 같이 입력한다.

/home/user/test    IN_MOVED_TO    /home/user/doit.sh


만일 하나 이상의 마스크를을 사용하고 싶으면 ,(콤마) 로 구분해주면 된다. 생성과 이동을 모두 감시하고 싶다면 이렇게.

/home/user/test    IN_CREATE,IN_MOVED_TO    /home/user/doit.sh


자세한 마스크 목록은 다음과 같다.

IN_ACCESS 

파일이 액세스 (읽기) 됨 (*) 

IN_ATTRIB

파일의 속성이 변경됨 (권한, 타임스탬프, 추가속성 등) (*) 

IN_CLOSE_WRITE 

쓰기 모드로 열었던 파일이 닫힘 (*) 

IN_CLOSE_NOWRITE 

쓰기모드가 아닌 모드로 열었던 파일이 닫힘 (*) 

IN_CREATE 

파일/디렉토리가 생성됨 (*) 

IN_DELETE 

파일/디렉토리가 삭제됨 (*) 

IN_DELETE_SELF 

모니터링 경로로 설정된 파일/디렉토리가 삭제됨 

IN_MODIFY 

파일이 변경됨 (*) 

IN_MOVE_SELF 

모니터링 경로로 설정된 파일/디렉토리가 이동됨 

IN_MOVED_FROM 

모니터링 경로에 있는 파일/디렉토리가 다른 곳으로 이동됨 (*) 

IN_MOVED_TO 

다른 곳에 있던 파일/디렉토리가 모니터링 경로 아래로 이동됨 (*) 

IN_OPEN

파일이 열림 (*) 


위의 마스크 중 별표(*) 가 표시된 이벤트는 디렉토리/파일에 모두 발생할 수 있는 이벤트를 의미한다.

만일 위의 모든 마스크를 한번에 사용하고 싶은 경우에는 IN_ALL_EVENTS 마스크를 사용하면 된다.

그 외에도 추가적인 마스크가 존재한다.

IN_MOVED_FROMIN_MOVED_TO 를 함께 사용하는 IN_MOVE 마스크

IN_CLOSE_WRITEIN_CLOSE_NOWRITE 를 함께 사용하는 IN_CLOSE 마스크


이 마스크에 덧붙여 사용할 수 있는 옵션도 있다.

IN_DONT_FOLLOW 

경로가 심볼릭 링크일 경우 그 자체만 감시한다 (링크를 따라가지 않는다)

IN_ONESHOT 

마스크에 해당되는 이벤트가 여러번 발생하더라도 최초 1회만 모니터링한다. 

IN_ONLYDIR 

모니터링하고자 하는 경로가 디렉토리일 경우, 그 자체만 감시한다 (하위 파일은 모니터링하지 않음) 



마지막으로, 스크립트 뒤에 파라미터로 몇가지 정보를 넘겨줄 수 있다.

$$ 

그냥 달러 기호 

$@

이벤트가 발생한 디렉토리 경로 

$# 

이벤트가 발생한 파일명 

$% 

이벤트 종류 (텍스트로 표시 - 마스크와 동일) 

$& 

이벤트 종류 (숫자로 표시) 



그럼 마지막으로 정리해보자.

/home/user/test 의 경로에 파일이 생성되거나 이동된 경우 /home/user/doit.sh 을 실행시키되 파라미터로 경로와 파일명을 넘기고 싶다면, 다음과 같이 입력하면 된다.

/home/user/test    IN_CREATE,IN_MOVED_TO    /home/user/doit.sh    $@    $#
반응형