nginx logrotate config

3

Qual é a melhor maneira de rodar arquivos de log nginx? Na minha opinião, eu deveria criar um arquivo "nginx" em /etc/logrotate.d/ e preenchê-lo com o seguinte código e fazer um /etc/init.d/syslog reiniciar depois disso.

Esta seria minha configuração (ainda não testei):

 /usr/local/nginx/logs/*.log {
    #rotate the logfile(s) daily
    daily
    # adds extension like YYYYMMDD instead of simply adding a number
    dateext
    # If log file is missing, go on to next one without issuing an error msg
    missingok
    # Save logfiles for the last 49 days
    rotate 49
    # Old versions of log files are compressed with gzip
    compress
    # Postpone compression of the previous log file to the next rotation cycle
    delaycompress
    # Do not rotate the log if it is empty
    notifempty
    # create mode owner group
    create 644 nginx nginx
    #after logfile is rotated and nginx.pid exists, send the USR1 signal
    postrotate
       [ ! -f /usr/local/nginx/logs/nginx.pid ] || kill -USR1 'cat
       /usr/local/nginx/logs/nginx.pid'
    endscript
 }

Eu tenho os arquivos access.log e error.log em / usr / local / nginx / logs / e quero rotacionar ambos diariamente. Alguém pode me dizer se "dateext" está correto? Eu quero que o nome do arquivo de log seja algo como "access.log-2010-12-04". Só mais uma coisa: posso fazer a rotação de log todos os dias em um horário específico (por exemplo, 11 da noite)? Se sim, como? Obrigado.

    
por TomOP 04.12.2010 / 22:44

4 respostas

1

man logrotate

   dateformat format_string
          Specify  the  extension for dateext using the notation similar to strftime(3) function. Only %Y %m
          %d and %s specifiers are allowed.  The default value is -%Y%m%d. Note that also the character sep‐
          arating log name from the extension is part of the dateformat string. The system clock must be set
          past Sep 9th 2001 for %s to work correctly.  Note that the datestamps  generated  by  this  format
          must be lexically sortable (i.e., first the year, then the month then the day. e.g., 2001/12/01 is
          ok, but 01/12/2001 is not, since 01/11/2002 would sort lower while it is later).  This is  because
          when using the rotate option, logrotate sorts all rotated filenames to find out which logfiles are
          older and should be removed.

Can anyone please tell me if "dateext" is correct? I want the log filename to be something like "access.log-2010-12-04".

Insira uma diretiva dateformat no seu arquivo de configuração, algo assim:

 /usr/local/nginx/logs/*.log {
    daily
    dateext
    dateformat -%Y-%m-%d
    ...

One more thing: Can I do the log rotation every day on a specific time (e.g. 11 pm)?

Por padrão, o logrotate está rodando via cron at 4 A.M:

/etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

Você pode mover esse arquivo para algum lugar e renomear para logrotate.sh e, em seguida, criar um novo arquivo em /etc/cron.d/ como belows:

0 23 * * * root /path/to/logrotate.sh
    
por 21.08.2012 / 12:34
1

Você pode girar todos os vhosts de uma só vez:

/var/www/vhosts/*/logs/*.log { ... }
    
por 17.04.2014 / 12:45
0

O valor para dateext é dado pela diretiva dateformat e o padrão é %Y%m%d (ano, mês e dia do mês). Você pode personalizá-lo como %Y-%m-%d .

Se você já tem logrotate instalado e funcionando, é provável que ele rode todos os dias como um trabalho cron , você só precisa encontrá-lo para mudar a hora (lembre-se que outras coisas influenciam, como o uso ou não de anacron , mas isso varia para cada sistema).

    
por 04.12.2010 / 23:22
0

Confira cronolog, link Isso deve fazer o que você precisa

    
por 16.03.2011 / 14:48