NFS - Detectando arquivos remotamente criados programaticamente?

5

Estou tentando monitorar um compartilhamento NFS e detectar a criação de um arquivo por um processo em execução em um sistema remoto. O problema é que a detecção não está funcionando depois que o arquivo foi criado, meu script ainda acha que não há arquivo. Se alguém executa um ls no diretório, ou eu executo um processo separado que apenas faz ls periodicamente em segundo plano, o script irá, então, detectar que o arquivo existe. No entanto, adicionar o recurso "ls o diretório" ao script principal não funciona: ele ainda não capta a existência do arquivo até que um processo externo faça com que o conteúdo da lista de diretórios seja atualizado, em algum lugar de alguma forma.

Aqui está um caso de teste que ilustra o problema:

watch_file.pl:

#!/usr/bin/perl -w
my @stat;
while (1) {
    @stat = stat("/nfs/test");
    last if ($stat[1] && $stat[1] > 0);
}

Execute esse script simples em "host-A":

host-A% ./watch_file.pl &
[1] 9312

Mover para o "host-B" e criar o arquivo:

host-B% touch /nfs/test

... volta para o "host-A", o programa ainda não foi encerrado:

host-A% 

... ainda em "host-A", faça um ls no diretório, então o script vê o arquivo:

host-A% ls -a /nfs
.  ..  test
host-A%
[1]+  Done                    ./watch_file.pl &
host-A%

Alguém sabe de uma correção ou solução simples para isso que seria menos trabalhoso do que executar um script em segundo plano para o diretório NFS do ls a cada 10 segundos?

    
por Daniel DeVoe 08.06.2011 / 18:03

1 resposta

6

Por padrão, a maioria dos clientes NFS armazena em cache informações do diretório por 60 segundos.

Monte o compartilhamento NFS no cliente com a opção noac para desativar o armazenamento em cache de atributo ou use acdirmin=0,acdirmax=0 para desativar o cache de diretório.

    
por 08.06.2011 / 19:01