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 데몬을 재시작하여 다시 이벤트 감시 상태로 둘 수 있습니다.