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.confpara 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
rotatelogscaso 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 depkillpara você. Simplesmente envolva o comando em um script e passe-o como--execparastart-stop-daemonem seuinit.d/nginx.