como colocar um gatilho em um diretório

25

Eu tenho um script que varre um diretório e faz alguma manutenção nos arquivos nele. Outro processo cria os arquivos no diretório (10 a 30 arquivos por dia).

O script é chamado por meio de um trabalho cron diário. O que eu preciso é acionar o script em um evento (cada vez que um novo arquivo é criado no diretório). Eu prefiro isso ao invés de aumentar a frequência do trabalho cron.

Como eu posso fazer isso? existe um comando ou um programa para instalar?

Agradecemos antecipadamente por qualquer ajuda.

Albert Green
fonte

Respostas:

23

inoticoming

inoticoming é um daemon para assistir a um diretório com a estrutura inotify do Linux e acionar ações quando arquivos com nomes específicos forem colocados lá.

Por exemplo, ele pode ser usado para aguardar arquivos .changes carregados em um diretório e chamar reprepro para colocá-los em seu repositório.

incron

incron é um sistema "inotify cron". Funciona como o cron regular, mas é orientado por eventos do sistema de arquivos em vez de eventos de tempo. Este pacote fornece dois programas, um daemon chamado "incrond" (análogo ao crond) e um manipulador de tabela "incrontab" (como "crontab").

A incron usa o kernel do Linux para inotify syscalls.

como cron, cada usuário pode editar suas próprias tabelas de incron.

Florian Diesch
fonte
2
Você poderia dar um exemplo? Os links para as páginas de manual também são bem-vindos, não encontrei o incron, o inoticomingque está aqui .
Lekensteyn
Para incron veja as páginas de manual de incrond, incrontab e incron.conf
Florian Diesch
2
Editei sua resposta da maneira que queria vê-la. Copiei-o das descrições dos pacotes, por favor, seja tão extensa no futuro ao nomear programas :)
Lekensteyn
4

Há também um pequeno programa chamado iwatch- veja a página de manual (esta página é para o Ubuntu precisa (12.04), possui links para outras versões do ubuntu).

iwatch tem a capacidade de monitorar pastas recursivamente (ou seja: subpastas também) e enviar e-mails em resposta a eventos de arquivo / diretório.

drevicko
fonte
3

Outro utilitário que vale a pena conhecer é fileschanged( página de manual aqui ), que pode monitorar eventos do sistema de arquivos em arquivos ou diretórios selecionados, por exemplo, o seguinte comando

fileschanged -s created -t1 $PWD

deve monitorar o diretório atual para eventos de criação de arquivo, escrevendo o nome do arquivo criado stdoutcom um tempo limite de 1 segundo.

fileschangedpode assistir pastas recursivamente (como pode iwatchser observado em outra resposta), ao contrário de incrone inoticoming.

enzotib
fonte
2

A página do manual inotify está localizada

se você preferir scripts python, você pode usar pyinotify

Pascal
fonte