파일 이벤트 모니터링 패키지 (incrontab)

리눅스/OS 일반|2020. 5. 19. 16:35
반응형

CentOS 8 에서 테스트 했습니다.

Ubuntu 20.04 에서는 데몬 시작시 incrond 대신 incron 을 사용합니다.

 

1. 설치

 

# yum -y install incron

또는

# cd /usr/local/src

# wget http://rpmfind.net/linux/epel/8/Everything/x86_64/Packages/i/incron-0.5.12-12.el8.x86_64.rpm

# rpm -ivh incron-0.5.12-12.el8.x86_64.rpm

 

 

2. 사용 방법

 

우선 incrond 를 실행 합니다.

 

# systemctl enable incrond

# systemctl start incrond

 

설정 방법은 crontab 과 유사 합니다.

 

아래와 같은 설정을 통해 원하는 작업을 실행 시킬 수 있으며,

설정값이 저장되면 crond 와 마찬가지로 incrond 데몬 재시작 없이도 적용이 됩니다.

 

# incrontab -e

 /data        IN_CLOSE_WRITE    /root/run.sh    

 

* 참고

Ubuntu 20.04 에서 아래와 같은 메세지가 출력된다면, 이는 incrontab 명령을 허용할 계정 리스트를 별도로 관리하고 있기 때문입니다.

# incrontab -e

user 'root' is not allowed to use incron

 
아래 파일을 열어 사용하고자 하는 계정을 추가해 줍니다

# vi /etc/incron.allow

 

root

 

* 위 설정 내용을 설명합니다.

/data 디렉토리 내의 파일 감시

파일 쓰기 작업을 끝낸 경우 (IN_CLOSE_WRITE )

/root/run.sh 파일을 실행합니다.

 

* 파일 이벤트 형태는 아래와 같이 다양합니다. (man page)

   > 괄호 안의 * 표시는 디렉토리와 파일에 모두 적용 됩니다.

       IN_ACCESS           File was accessed (read) (*)

       IN_ATTRIB           Metadata changed (permissions, timestamps, extended attributes, etc.) (*)

       IN_CLOSE_WRITE      File opened for writing was closed (*)

       IN_CLOSE_NOWRITE    File not opened for writing was closed (*)

       IN_CREATE           File/directory created in watched directory (*)

       IN_DELETE           File/directory deleted from watched directory (*)

       IN_DELETE_SELF           Watched file/directory was itself deleted

       IN_MODIFY           File was modified (*)

       IN_MOVE_SELF        Watched file/directory was itself moved

       IN_MOVED_FROM       File moved out of watched directory (*)

       IN_MOVED_TO         File moved into watched directory (*)

       IN_OPEN             File was opened (*)

 
* 설정 파일에 아래와 같은 와일드 카드를 사용하여 인자값을 전달 할 수 있습니다. (man page)
       $$   dollar sign
       $@   watched filesystem path (see above)
       $#   event-related file name
       $%   event flags (textually)
       $&   event flags (numerically)
 
* 사용예 (man page)
       /tmp IN_ALL_EVENTS abcd $@/$# $%
       /usr/bin IN_ACCESS,loopable=true abcd $#
       /home IN_CREATE /usr/local/bin/abcd $#
       /home IN_CREATE,dotdirs=true /usr/local/bin/abcd $#
       /home IN_CREATE,recursive=false /usr/local/bin/abcd $#
       /var/log 12 abcd $@/$#
 
 
* 참고
파일 수정 프로세스에 따라 IN_CLOSE_WRITE 가 빈번히 일어나는 경우가 있습니다.
(메일을 한통 받더라도 여러 이벤트가 발생됨)
이 경우 IN_ONESHOT 옵션을 추가하여 한번만 실행하도록 한 다음,
프로세스가 모든 처리를 완료하면 incrond 데몬을 재시작하여 다시 이벤트 감시 상태로 둘 수 있습니다.
 
 
반응형

댓글()