Um script de shell pode esperar que um arquivo seja alterado e execute uma ação?

12

Gostaria de saber se posso escrever um script que monitore uma alteração em um arquivo e execute alguma ação quando a alteração for detectada.

Explicação detalhada:

  1. O OpenVPN grava seu status em um arquivo a cada 1 minuto.
  2. Eu preciso analisar esse arquivo de status e agir.
  3. O OpenVPN trunca o arquivo de status antes de gravar nele.
  4. Eu tentei gravar em um pipe nomeado, mas recebo erros indesejáveis (mas não fatais) no aplicativo quando ele não consegue truncar o canal.
por davidparks21 05.07.2011 / 11:20

4 respostas

21

Barato e sujo:

Ative o stat -c %Y file e tome medidas quando a hora da modificação mudar.

Provavelmente melhor:

Use o serviço inotify cron para assistir a eventos de modificação de arquivos e executar sua ação:

/path/to/your/file IN_MODIFY /path/to/your/script $#
    
por 05.07.2011 / 11:50
4

Dê uma olhada no incron [1] ou em outros materiais inotify para acionar a execução do seu script.

[1] link

    
por 05.07.2011 / 11:48
2

inotify seria o caminho certo para fazê-lo. Tutoriais são dados em alguma edição da revista LinuxForYou para esta questão.

    
por 05.07.2011 / 18:59
0

Portanto, tenha um script que:

1) Verifica a hora da modificação no arquivo (com stat)
2) Se a hora da modificação é mais recente do que quando foi marcada pela última vez, ela foi alterada. 3) Analise e execute sua ação
4) Além disso, durma 1 minuto e, em seguida, reloop

    
por 05.07.2011 / 11:51