[Ubuntu 22.04] incron

mimic1995·2024년 4월 15일

incron 이란?

파일 시스템 이벤트를 감시 및 모니터링 하다가 설정한 특정 이벤트에 사용자가 지정한 작업을 수행합니다.
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_ACCESSFile was accessed (read) (*)파일이 읽혔을 때 발생합니다.파일 및 폴더
IN_ATTRIBMetadata changed (permissions, timestamps, extended attributes, etc.) (*)파일의 메타데이터(권한, 타임스탬프, 확장 속성 등)가 변경될 때 발생합니다.
IN_CLOSE_WRITEFile opened for writing was closed (*)파일이 쓰기 모드로 열렸다가 닫혔을 때 발생합니다.
IN_CLOSE_NOWRITEFile not opened for writing was closed (*)파일이 쓰기 모드로 열리지 않았는데 닫혔을 때 발생합니다.
IN_CREATEFile/directory created in watched directory (*)감시 중인 디렉토리에 파일이나 디렉토리가 생성될 때 발생합니다
IN_DELETEFile/directory deleted from watched directory (*)감시 중인 디렉토리에서 파일이나 디렉토리가 삭제될 때 발생합니다.
IN_DELETE_SELFWatched file/directory was itself deleted감시 중인 파일이나 디렉토리가 삭제되면 발생합니다.
IN_MODIFYFile was modified (*)파일이 수정될 때 발생합니다.
IN_MOVE_SELFWatched file/directory was itself moved감시 중인 파일이나 디렉토리가 이동될 때 발생합니다.
IN_MOVED_FROMFile moved out of watched directory (*)감시 중인 디렉토리에서 파일이 이동될 때 발생합니다.
IN_MOVED_TOFile moved into watched directory (*)감시 중인 디렉토리로 파일이 이동될 때 발생합니다.
IN_OPENFile was opened (*)파일이 열릴 때 발생합니다.
IN_DONT_FOLLOWDon't dereference pathname if it is a symbolic link심볼릭 링크를 따르지 않도록 지정합니다. 따라서 incron은 심볼릭 링크가 가리키는 대상이 아닌 심볼릭 링크 자체를 감지합니다.
IN_ONESHOTMonitor pathname for only one event해당 이벤트에 대해 한 번만 감지하도록 지정합니다. 이것은 일회성 작업을 수행하는 데 유용합니다. 이벤트가 발생하면 incron은 해당 이벤트를 감지하고 모니터링을 중지합니다.
IN_ONLYDIROnly watch pathname if it is a directory특정 경로를 디렉토리로만 감지하도록 지정합니다. 따라서 incron은 해당 경로에 대한 이벤트를 감지하기 위해 파일이 아닌 디렉토리만 감지합니다.

  • 만일 어떤 디렉터리에 파일이 새로 생성될 때 마다 체크하고 싶다면 IN_CREATE나 IN_CLOSE_WRITE를 통해 수행 가능합니다. 단순히 생성되는 순간이 필요하다면 IN_CREATE를 사용하지만 파일이 완벽하게 생성되어 해당 파일 쓰기 작업이 종료된 경우 수행하려면 IN_CLOSE_WRITE를 사용할 수 있습니다. 다만, IN_CREATE보다 체감으로 발동 속도가 느릴 수 있습니다.

🐦 [인자_값]에 들어갈 값 목록을 자세히 알아보겠습니다.

option 명상세번역
$$dollar sign단순 $ 기호
$#event-related file name이벤트에 해당되는 파일 명
$@이벤트에 해당되는 폴더 명
$%event flags (textually)텍스트 형식의 이벤트 플래그
(어떤 발동_조건 값에 해당하는 이벤트가 발생하였는지)
$&event flags (numerically)숫자 형식의 이벤트 플래그
(IN_ACCESS = 1, IN_MODIFY = 2 ⋯)
  • $$ 기호가 어떤 역할을 하는지 테스트하고자 echo "$$"로 넣어 보았는데 아래 이미지와 같은 결과를 echo로 반환하였습니다. 단순 기호 $를 반환하는 것 같습니다.


🧏 예제 1. 디렉터리에 새 파일 생성 시 해당 파일 이름으로 스크립트 인자 값 넣어 실행

/home/test      IN_CLOSE_WRITE   /home/script/run.sh $#
profile
Raiju Hantu Goryo Obake

0개의 댓글