O script de execução longa para de enviar a saída para o arquivo

2

Eu tenho um script que estou usando para capturar algum status do servidor em intervalos de 10 segundos.

O script é o seguinte:

for (( ; ; ))
do
    /usr/local/apache/bin/apachectl fullstatus
    sleep 10
done

Estou executando o script usando:

nohup /path/to/scriptname.sh | gzip > logfile.log.gz &

Ele será executado em segundo plano e continuará em execução se eu desconectar do ssh. No entanto, após cerca de 3-4 horas, a saída deixa de ser transferida para o arquivo de log. O script ainda está em execução e aparece se eu executar ps -elf | grep scriptname, mas o arquivo de log não é atualizado. Por que a saída para de enviar? Isso é possivelmente um problema com o buffer?

    
por Matt Pennington 14.01.2016 / 20:32

1 resposta

1

O formato de arquivo gzip tem um rodapé de 8 bytes contendo uma soma de verificação CRC-32 e comprimento descompactado dos dados. O formato de arquivo DEFLATE é orientado a bloco. O programa gzip no pipeline é quase certamente armazenar em buffer a entrada para usar no próximo bloco de saída. O rodapé de 8 bytes não será escrito até que o script de shell de longa execução seja encerrado e a stdin de gzip seja fechada. Eu acho que você terá que esperar por um longo tempo para ver se os blocos DEFLATE não são periodicamente gravados no arquivo de log.

    
por 14.01.2016 / 21:05