파일 시스템 이벤트를 감시 및 모니터링 하다가 설정한 특정 이벤트에 사용자가 지정한 작업을 수행합니다.
crond가 특정 시간을 기준으로 동작한다면 incron은 파일 및 폴더 관련 이벤트가 발생하는 기준으로 동작한다고 이해하면 수월합니다.
※ Ubuntu 22.04 환경에서 진행하였습니다.
# 설치
apt install -y incron
설치 후 그냥 실행한다면 사용 권한이 없다는 에러가 발생할 수 있습니다. 아래 파일에서 incron 사용 권한에 user를 추가해줍니다.
vi /etc/incron.allow
===
root
일반 사용자 계정 필요 시 Enter로 구분하여 추가
===
incron은 default로 nano editor로 실행되며, vi editor가 손에 익기 때문에 기본 editor를 변경하겠습니다.
editor 변경은 /etc/profile에 설정 값을 추가해주는 것으로도 가능하지만 정석으로 변경하려면 incron 설정 파일에서 변경하겠습니다.
# incron 설정 파일
vi /etc/incron.conf
===
editor = vi
===
# /etc/profile로 할 경우
vi /etc/profile
===
editor = vi
export editor
===
source /etc/profile
설정을 모두 마쳤다면 서비스 데몬을 실행해줍니다.
systemctl enable incron --now
incron 감시 설정은 아래 명령어로 추가‧로드‧삭제 가능합니다.
incrontab -e: 이벤트 감시 설정 추가를 위해 파일 열기
incrontab -l: 현재 계정에 추가된 설정 확인하기
incrontab -d: incrontab -e 로 수정하고 나서 reload
incrontab -r: 현재 계정에 추가된 incrontab 모두 삭제
설정 추가 default 양식은 아래와 같습니다.
# 띄어쓰기로 각 값을 구분합니다. Enter로 하나의 묶음을 구분합니다.
감시할_폴더 발동_조건 실행할_명령어_혹은_스크립트 인자_값
🐦 [발동_조건]에 들어갈 값 목록을 자세히 알아보겠습니다.
| option 명 | 상세 | 번역 | 해당 범위 |
|---|---|---|---|
| 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 (*) | 파일이 열릴 때 발생합니다. | |
| IN_DONT_FOLLOW | Don't dereference pathname if it is a symbolic link | 심볼릭 링크를 따르지 않도록 지정합니다. 따라서 incron은 심볼릭 링크가 가리키는 대상이 아닌 심볼릭 링크 자체를 감지합니다. | |
| IN_ONESHOT | Monitor pathname for only one event | 해당 이벤트에 대해 한 번만 감지하도록 지정합니다. 이것은 일회성 작업을 수행하는 데 유용합니다. 이벤트가 발생하면 incron은 해당 이벤트를 감지하고 모니터링을 중지합니다. | |
| IN_ONLYDIR | Only watch pathname if it is a directory | 특정 경로를 디렉토리로만 감지하도록 지정합니다. 따라서 incron은 해당 경로에 대한 이벤트를 감지하기 위해 파일이 아닌 디렉토리만 감지합니다. |
🐦 [인자_값]에 들어갈 값 목록을 자세히 알아보겠습니다.
| option 명 | 상세 | 번역 |
|---|---|---|
| $$ | dollar sign | 단순 $ 기호 |
| $# | event-related file name | 이벤트에 해당되는 파일 명 |
| $@ | 이벤트에 해당되는 폴더 명 | |
| $% | event flags (textually) | 텍스트 형식의 이벤트 플래그 (어떤 발동_조건 값에 해당하는 이벤트가 발생하였는지) |
| $& | event flags (numerically) | 숫자 형식의 이벤트 플래그 (IN_ACCESS = 1, IN_MODIFY = 2 ⋯) |
$$ 기호가 어떤 역할을 하는지 테스트하고자 echo "$$"로 넣어 보았는데 아래 이미지와 같은 결과를 echo로 반환하였습니다. 단순 기호 $를 반환하는 것 같습니다. /home/test IN_CLOSE_WRITE /home/script/run.sh $#