como gravar valores diferentes de um arquivo "flag"

2

Eu tenho um sistema de caixa preta que atualiza periodicamente um arquivo "sinalizador" de linha única. Este arquivo de linha única leva, ao longo da vida do sistema, vários valores diferentes, correspondentes aos estados de um FSM.

Por exemplo como "baixar", "validar", "postar", etc. A qualquer momento, o valor é diferente, portanto o software deve abrir o arquivo "sinalizador", truncá-lo e gravar o novo valor de linha única. / p>

Como posso manter um log da sucessão de valores diferentes? Eu estava pensando em algo como tail -f , mas com a capacidade de registrar os diferentes valores e com uma maneira garantida de não mexer no sistema de arquivos quando o software está atualizando esses valores. Um simples tail -f falha com "arquivo truncado" depois de algum tempo.

    
por Marcus Junius Brutus 23.11.2013 / 16:34

1 resposta

4

Você provavelmente deseja tail -F (observe que ele está em maiúscula), que tentará abrir / ler o arquivo se ele falhar.

De man tail :

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, 
          and --follow=descriptor are equivalent

   -F     same as --follow=name --retry

   --retry
          keep trying to open a file even when it is or becomes
          inaccessible; useful when following by name, i.e., with
          --follow=name

Se a sua versão de tail não tiver -F (o que equivale a tail -f=name --retry ), você poderá usar inotify e esperar por close_write ( inotifywait faz parte de inotify-tools ):

file=foo

while inotifywait -qq -e close_write "$foo" >/dev/null; do
    cat "$foo"
done > log

tail -F deve ser preferido, se disponível, porque há uma condição de disputa ao usar inotifywait .

    
por 23.11.2013 / 16:38

Tags