logging com pipes nomeados

1

Eu tenho um monte de código que eu preciso para daemonizar as impressões para o padrão. Estou pensando em usar o script de shell a seguir para criar um pipe nomeado para que eu possa nohup um processo ao redirecionar sua saída para o pipe.

#!/bin/bash

###############3
# creates a pipe with name pipename that will redirect to filename and rotate logs on C-c
###############3

if [ $# -ne 2 ]; then
    echo "USAGE: ./$0 pipename filename" 
    exit -1
fi

pipename=$1; 
if [ -p $pipename ]; then
    rm $pipename;
fi
origname=$2.log
filename=$2

rename()
{
    newfilename="$origname-'date +%s'"
    mv $origname $newfilename
    nohup nice -n 20 tar -czvf $newfilename.tar.gz $newfilename &
    trap rename 2
}

mkfifo $pipename
trap rename 2

while [ 1 -eq 1 ]
do
    read input
    echo $input >> $origname
done  $pipename

Então eu poderia começar um processo da seguinte maneira:

nohup myprog.py > namedpipe 2>&1 &

Depois de iniciado, eu configuraria uma tarefa cron para enviar um sinal para rotação.

Este script é robusto / eficiente?

    
por Hersheezy 20.05.2012 / 02:15

1 resposta

1

Não.

Se o namedpipe já existir, imprima um aviso e pare em vez de simplesmente excluí-lo: o que acontece com o script que o estava usando? Veja os scripts existentes em /etc/init.d . Olhe para start-stop-daemon no Debian e Ubuntu (ou qualquer distro derivada do Debian).

As mensagens de erro devem ir para stderr, não stdout. Há um redirecionamento de entrada ausente no final. Tar adiciona sobrecarga desnecessária: apenas gzip o arquivo.

E assim por diante.

Mas, em todo caso, é desnecessário adicionar a rotação de log a scripts iniciados com nohup: basta usar a opção copytruncate em logrotate (consulte man logrotate ); e abandonar sua solução de pipe nomeado.

    
por 20.05.2012 / 09:34