보통 서버에서 자동으로 작업을 수행하기 위해서는 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_FROM
과 IN_MOVED_TO
를 함께 사용하는 IN_MOVE
마스크
IN_CLOSE_WRITE
와 IN_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 $@ $#
'컴퓨터 - 기타' 카테고리의 다른 글
맥에서 일정시간 간격으로 자동 스크린샷 찍기 (0) | 2023.02.07 |
---|---|
맥에서 알림센터 알림 한번에 없애기 (+ Big Sur 업데이트) (5) | 2021.08.21 |
BOSE Soundtouch API 는 외부에서 사용할 수 없다 (0) | 2020.03.18 |
맥 사용자들이 의외로 잘 모르는 활용 팁 (0) | 2017.03.30 |
웹호스팅의 MySQL DB에 클라이언트 프로그램(Sequel Pro)으로 접속하기 (0) | 2017.02.24 |