시스템 관리 · 4 min read · Nov 11, 2025

Debian Etch에서 Incron을 사용하여 파일/디렉토리 변경 시 명령 실행하기

이 가이드는 Debian Etch 시스템에서 incron을 설치하고 사용하는 방법을 보여줍니다. Incron은 cron과 유사하지만, 시간에 따라 명령을 실행하는 대신 파일 또는 디렉토리 이벤트가 발생할 때 명령을 트리거할 수 있습니다(예: 파일 수정, 권한 변경 등).

이 문서는 어떠한 종류의 보증 없이 제공됩니다! 이것이 귀하에게 작동할 것이라는 보장을 하지 않습니다!

1 Incron 설치하기

Incron은 etch-backports 저장소에서 사용할 수 있으므로, 다음 줄을 /etc/apt/sources.list에 추가해야 합니다:

vi /etc/apt/sources.list

| [...] deb http://www.backports.org/debian etch-backports main contrib non-free [...] |

백포트.org 아카이브 키를 apt에 가져옵니다…

wget -O - http://backports.org/debian/archive.key | apt-key add -

… 그리고 실행합니다

apt-get update

etch-backports 저장소는 기본적으로 비활성화되어 있으므로, 여기에서 incron을 설치하려면 다음 명령을 사용해야 합니다:

apt-get -t etch-backports install incron

2 Incron 사용하기

Incron 사용법은 cron 사용법과 매우 유사합니다. incrontab 명령을 사용하여 incrontab 항목을 나열(-l), 편집(-e) 및 제거(-r)할 수 있습니다. 이에 대해 더 알고 싶다면 다음을 참조하세요:

man incrontab

여기에서 다음 섹션도 찾을 수 있습니다:

If /etc/incron.allow가 존재하는 경우, 여기 나열된 사용자만 incron을 사용할 수 있습니다. 그렇지 않으면 /etc/incron.deny가 존재하는 경우, 여기 나열되지 않은 사용자만 incron을 사용할 수 있습니다. 이러한 파일이 모두 존재하지 않으면 모든 사용자가 incron을 사용할 수 있습니다. (중요 참고: 이 동작은 안전하지 않으며 ISC Cron에서 사용하는 스타일과 호환되도록 변경될 가능성이 높습니다.) 이러한 파일의 위치는 구성에서 변경할 수 있습니다.

이것은 우리가 root로 incrontab을 사용하려면 /etc/incron.allow를 삭제해야 한다는 것을 의미합니다(모든 시스템 사용자가 incrontab을 사용할 수 있게 되므로 안전하지 않음)…

rm -f /etc/incron.allow

… 또는 root를 해당 파일에 추가해야 합니다(권장):

vi /etc/incron.allow

| root |

이 작업을 수행하기 전에 incrontab을 사용하려고 할 때 다음과 같은 오류 메시지가 표시됩니다:

server1:~# incrontab -l  
user 'root' is not allowed to use incron  
server1:~#

그 후에는 작동합니다:

server1:~# incrontab -l  
no table for root  
server1:~#

다음 명령을 사용하여

incrontab -e

incron 작업을 생성할 수 있습니다. 이를 수행하기 전에 다음을 살펴보겠습니다:

man 5 incrontab

이 문서는 crontab의 형식을 설명합니다. 기본적으로 형식은 다음과 같습니다…

  

… 여기서 는 디렉토리(즉, 해당 디렉토리와/또는 해당 디렉토리에 직접 있는 파일(해당 디렉토리의 하위 디렉토리에 있는 파일은 아님!)) 또는 파일이 될 수 있습니다.

는 다음 중 하나일 수 있습니다: ``` 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_MOVE로, 이는 IN_MOVED_FROM 및 IN_MOVED_TO의 조합이며, IN_CLOSE는 IN_CLOSE_WRITE 및 IN_CLOSE_NOWRITE를 결합합니다. 마스크에 지정할 수 있는 추가 기호는 다음과 같습니다: ``` IN_DONT_FOLLOW 심볼릭 링크인 경우 경로 이름을 역참조하지 않음 IN_ONESHOT 단일 이벤트에 대해서만 경로 이름을 모니터링 IN_ONLYDIR 경로 이름이 디렉토리인 경우에만 감시 ``` 추가로, inotify 기호 집합에 나타나지 않는 기호가 있습니다. 그것은 IN_NO_LOOP입니다. 이 기호는 현재 이벤트가 완전히 처리될 때까지(자식 프로세스가 종료될 때까지) 이벤트 모니터링을 비활성화합니다. 는 이벤트가 발생할 때 실행해야 하는 명령입니다. 명령 사양 내에서 다음 와일드카드를 사용할 수 있습니다: ``` $$ 달러 기호 $@ 감시 파일 시스템 경로 (위 참조) $# 이벤트 관련 파일 이름 $% 이벤트 플래그 (텍스트로) $& 이벤트 플래그 (숫자로) ``` 디렉토리를 감시하는 경우, $@는 디렉토리 경로를 보유하고 $#는 이벤트를 트리거한 파일을 보유합니다. 파일을 감시하는 경우, $@는 파일에 대한 전체 경로를 보유하고 $#는 비어 있습니다. 와일드카드가 필요하지만 그것들이 무엇으로 변환되는지 확실하지 않은 경우, 다음과 같은 incron 작업을 생성할 수 있습니다: | ``` /tmp/ IN_MODIFY echo "$ $@ $# $% $&" ``` | 그런 다음 /tmp 디렉토리에서 파일을 생성하거나 수정하고 /var/log/syslog를 살펴보세요 - 이 로그는 incron 작업이 언제 트리거되었는지, 성공했는지 또는 오류가 있었는지, 그리고 실제로 실행된 명령이 무엇인지 보여줍니다(즉, 와일드카드는 실제 값으로 대체됩니다). ``` tail /var/log/syslog ``` ``` ... Aug 21 17:26:50 server1 incrond[7111]: (root) CMD (echo "$ /tmp huhu IN_CREATE 256") ``` 이 예제에서 저는 /tmp/huhu 파일을 생성했습니다. 보시다시피 $@는 /tmp로 변환되고, $#는 huhu로, $%는 IN_CREATE로, $&는 256으로 변환됩니다. 이제 이론은 충분합니다. 첫 번째 incron 작업을 생성해 보겠습니다. 저는 /etc/apache2/apache2.conf 파일과 /etc/apache2/vhosts/ 디렉토리를 모니터링하고, 변경 사항이 있을 때마다 incron이 Apache를 재시작하도록 하고 싶습니다. 방법은 다음과 같습니다: ``` incrontab -e ``` | ``` /etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart /etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart ``` | 그게 전부입니다. 테스트 목적으로 Apache 구성을 수정하고 /var/log/syslog를 살펴보면 incron이 Apache를 재시작하는 것을 볼 수 있어야 합니다. 정의된 모든 incron 작업을 나열하려면 다음을 실행할 수 있습니다: ``` incrontab -l ``` ``` server1:~# incrontab -l /etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart /etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart server1:~# ``` 현재 사용자의 모든 incron 작업을 삭제하려면 다음을 실행합니다: ``` incrontab -r ``` ``` server1:~# incrontab -r removing table for user 'root' table for user 'root' successfully removed server1:~# ``` ### 3 링크 - incron: http://inotify.aiken.cz/?section=incron&page=about&lang=en
Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.