Bytes nulos em um arquivo criado por 2 rotacionados com logrotate?

3

Estou usando o utilitário script para gravar sessões de terminal e usando logrotate (com copytruncate , O script ignora o HUP e continua gravando no arquivo rotacionado caso contrário) para enviar periodicamente partes do que aconteceu até agora para outro servidor. Isso funciona muito bem para o conteúdo real da tela.

Hoje estou tentando também capturar informações de tempo, que o script emite para STDERR. Então, minha nova configuração de script parece

script -faqt session.record 2> session.timing

O problema é que quando eu uso logrotate nos dados de temporização (session.timing) o arquivo com backfilled começa com um grande número de bytes nulos na saída, o que faz com que a scriptreplay inicie quando lê o arquivo reconstruído de volta. / p>

Existe um problema conhecido (e esperamos que seja solução) usando o logrotate com a opção copytruncate no STDERR redirecionada para um arquivo?

    
por Jeremy Wadhams 24.05.2013 / 06:36

2 respostas

3

Você precisa redirecionar o stderr usando 2>> (append). Esse é um problema com arquivos abertos sem o O_APPEND flag e o copyrtrate do logrotate.

    
por 11.07.2013 / 23:29
0

Se eu não conseguir consertá-lo, posso contornar isso adicionando um script postrotado como:

postrotate
   sed -i -e 's/\o00//g' session.timing.1
endscript

O qual removerá qualquer bytes NULOS (já que eles são ilegais em qualquer lugar nos arquivos de tempo de script) do primeiro arquivo girado.

Presumivelmente em um arquivo girado em que NULL às vezes é OK, você poderia alterar esse comando sed para remover apenas bytes NULL do início da linha zero no arquivo.

    
por 24.05.2013 / 06:45