Incron · 5 min read · Nov 11, 2025

Acionando Comandos em Mudanças de Arquivos/Diretórios Com Incron no Debian Etch

Este guia mostra como você pode instalar e usar incron em um sistema Debian Etch. Incron é semelhante ao cron, mas em vez de executar comandos com base no tempo, ele pode acionar comandos quando eventos de arquivos ou diretórios ocorrem (por exemplo, uma modificação de arquivo, mudanças de permissões, etc.).

Este documento vem sem garantia de qualquer tipo! Eu não emito nenhuma garantia de que isso funcionará para você!

1 Instalando Incron

Incron está disponível no repositório etch-backports, então precisamos adicionar a seguinte linha ao /etc/apt/sources.list:

vi /etc/apt/sources.list

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

Vamos importar a chave do arquivo backports.org para o apt…

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

… e executar

apt-get update

O repositório etch-backports está inativo por padrão, então para instalar incron a partir dele, devemos usar o seguinte comando:

apt-get -t etch-backports install incron

2 Usando Incron

O uso do incron é muito semelhante ao uso do cron. Você tem o comando incrontab que permite listar ( -l), editar ( -e) e remover ( -r) entradas do incrontab. Para saber mais sobre isso, veja

man incrontab

Lá você também encontrará a seguinte seção:

Se /etc/incron.allow existir, apenas os usuários listados aqui podem usar incron. Caso contrário, se /etc/incron.deny existir, apenas os usuários NÃO listados aqui podem usar incron. Se nenhum desses arquivos existir, todos estão autorizados a usar incron. (Nota importante: Esse comportamento é inseguro e provavelmente será alterado para ser compatível com o estilo usado pelo ISC Cron.) A localização desses arquivos pode ser alterada na configuração.

Isso significa que se quisermos usar incrontab como root, devemos ou deletar /etc/incron.allow (o que é inseguro porque então qualquer usuário do sistema pode usar incrontab)…

rm -f /etc/incron.allow

… ou adicionar root a esse arquivo (recomendado):

vi /etc/incron.allow

| root |

Antes de fazer isso, você receberá mensagens de erro como esta ao tentar usar incrontab:

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

Depois disso funciona:

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

Podemos usar

incrontab -e

para criar trabalhos incron. Antes de fazermos isso, damos uma olhada em

man 5 incrontab

porque ele explica o formato dos crontabs. Basicamente, o formato é o seguinte…

  

… onde pode ser um diretório (significando que o diretório e/ou os arquivos diretamente nesse diretório (não arquivos em subdiretórios desse diretório!) são monitorados) ou um arquivo.

pode ser um dos seguintes: ``` IN_ACCESS Arquivo foi acessado (lido) (*) IN_ATTRIB Metadados alterados (permissões, timestamps, atributos estendidos, etc.) (*) IN_CLOSE_WRITE Arquivo aberto para escrita foi fechado (*) IN_CLOSE_NOWRITE Arquivo não aberto para escrita foi fechado (*) IN_CREATE Arquivo/diretório criado no diretório monitorado (*) IN_DELETE Arquivo/diretório deletado do diretório monitorado (*) IN_DELETE_SELF Arquivo/diretório monitorado foi ele mesmo deletado IN_MODIFY Arquivo foi modificado (*) IN_MOVE_SELF Arquivo/diretório monitorado foi ele mesmo movido IN_MOVED_FROM Arquivo movido para fora do diretório monitorado (*) IN_MOVED_TO Arquivo movido para dentro do diretório monitorado (*) IN_OPEN Arquivo foi aberto (*)) ``` Ao monitorar um diretório, os eventos marcados com um asterisco (*) acima podem ocorrer para arquivos no diretório, caso em que o campo de nome nos dados do evento retornado identifica o nome do arquivo dentro do diretório. O símbolo IN_ALL_EVENTS é definido como uma máscara de bits de todos os eventos acima. Dois símbolos adicionais de conveniência são IN_MOVE, que é uma combinação de IN_MOVED_FROM e IN_MOVED_TO, e IN_CLOSE que combina IN_CLOSE_WRITE e IN_CLOSE_NOWRITE. Os seguintes símbolos adicionais podem ser especificados na máscara: ``` IN_DONT_FOLLOW Não desreferenciar o caminho se for um link simbólico IN_ONESHOT Monitorar o caminho apenas para um evento IN_ONLYDIR Apenas observar o caminho se for um diretório ``` Adicionalmente, há um símbolo que não aparece no conjunto de símbolos do inotify. É o IN_NO_LOOP. Este símbolo desabilita o monitoramento de eventos até que o atual seja completamente tratado (até que seu processo filho saia). é o comando que deve ser executado quando o evento ocorre. Os seguintes curingas podem ser usados dentro da especificação do comando: ``` $$ sinal de dólar $@ caminho do sistema de arquivos monitorado (veja acima) $# nome do arquivo relacionado ao evento $% flags do evento (textualmente) $& flags do evento (numericamente) ``` Se você observar um diretório, então $@ contém o caminho do diretório e $# o arquivo que acionou o evento. Se você observar um arquivo, então $@ contém o caminho completo para o arquivo e $# está vazio. Se você precisar dos curingas, mas não tiver certeza do que eles traduzem, pode criar um trabalho incron assim: | ``` /tmp/ IN_MODIFY echo "$ $@ $# $% $&" ``` | Então você cria ou modifica um arquivo no diretório /tmp e dá uma olhada em /var/log/syslog - este log mostra quando um trabalho incron foi acionado, se teve sucesso ou se houve erros, e qual foi o comando real que ele executou (ou seja, os curingas são substituídos por seus valores reais). ``` tail /var/log/syslog ``` ``` ... Aug 21 17:26:50 server1 incrond[7111]: (root) CMD (echo "$ /tmp huhu IN_CREATE 256") ``` Neste exemplo, eu criei o arquivo /tmp/huhu; como você vê, $@ traduz para /tmp, $# para huhu, $% para IN_CREATE, e $& para 256. Agora chega de teoria. Vamos criar nossos primeiros trabalhos incron. Eu gostaria de monitorar o arquivo /etc/apache2/apache2.conf e o diretório /etc/apache2/vhosts/, e sempre que houver mudanças, quero que o incron reinicie o Apache. É assim que fazemos: ``` incrontab -e ``` | ``` /etc/apache2/apache2.conf IN_MODIFY /etc/init.d/apache2 restart /etc/apache2/vhosts/ IN_MODIFY /etc/init.d/apache2 restart ``` | É isso. Para fins de teste, você pode modificar sua configuração do Apache e dar uma olhada em /var/log/syslog, e você deve ver que o incron reinicia o Apache. Para listar todos os trabalhos incron definidos, você pode executar ``` 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:~# ``` Para deletar todos os trabalhos incron do usuário atual, execute ``` incrontab -r ``` ``` server1:~# incrontab -r removing table for user 'root' table for user 'root' successfully removed server1:~# ``` ### 3 Links - incron: http://inotify.aiken.cz/?section=incron&page=about&lang=pt
Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.