Enquanto o mundo está dividido sobre se o humilde named pipe é amigo ou inimigo, é provavelmente a solução mais simples para o seu problema. Ele tem algumas desvantagens (em que você precisa criar os pipes antes do tempo), mas elimina a necessidade de um cron e permite que você use o filtro de canal de log de sua escolha.
Veja um exemplo usando o cronolog em access.log
:
- Escolha um caminho para o nosso pipe nomeado. Eu pretendo manter meus logs em
/var/log/nginx
, então também colocarei meus canos. O nome é com você; Eu acrescento.fifo
, e éaccess.log
, então o meu será em/var/log/nginx/access.log.fifo
. - Exclua o arquivo, se existir.
-
Crie um pipe nomeado para o arquivo de log:
mkfifo /var/log/nginx/access.log.fifo
-
Configure
nginx.conf
para apontar o log no canal que acabou de criar:access_log /var/log/nginx/access.log.fifo;
-
Modifique seu script init.d para iniciar o roteador de registro ouvindo o canal antes de iniciarmos o servidor:
LOGS="/var/log/nginx" pkill -f "/usr/sbin/cronolog --symlink $LOGS/access.log" ( cat $LOGS/access.log.fifo | /usr/sbin/cronolog --symlink $LOGS/access.log "$LOGS/%Y/%m/%d/access.log" ) &
Uma linha de comando similar seria usada para
rotatelogs
caso você prefiracronolog
- consulte os documentos para a sintaxe.Se o seu distrobution tiver um
start-stop-daemon
, você deve usá-lo, já que, teoricamente, ele tem algum conhecimento especial sobre a sua plataforma e está cuidando depkill
para você. Simplesmente envolva o comando em um script e passe-o como--exec
parastart-stop-daemon
em seuinit.d/nginx
.