Cómo insertar una fecha en el interior el nombre de archivo con logrotate

Necesitas logrotate para rotar los archivos de registro de una aplicación que se ejecuta en el servidor.
Necesito la fecha dentro del nombre de archivo.

Me puse dateext y también dateformat para añadir una – en la fecha.
El resultado de nombre de archivo es:lo que sea.csv_2012-03-03

Me gustaría que la marca de tiempo para ser parte del nombre de archivo manteniendo a salvo la extensión; Whatever_2012-03-03.csv.

InformationsquelleAutor Bernard Sfez | 2012-03-04

2 Kommentare

  1. 61

    Usted debería ser capaz de mantener la extensión de diferencia, por ejemplo,whatever.2012-03-03.csv, con la siguiente configuración:

    whatever.csv {
      dateext
      dateformat .%Y-%m-%d
      extension .csv
      ...
    }
    

    Nota la dateext es deliberadamente vacío.

    • He intentado esto, pero la fecha se agrega en cada rotación, así que tengo file.log, file.2014-01-08.log y file.2014-01-07.2014-01-08.log etc.
    • He encontrado que la extension debe tener la . por lo que la forma correcta es extension .csv. Este también es seguido en compressext como en compressext .bz2
    • También, se debe dateformat .%Y-%m-%d (el primer punto es para la fecha, el segundo para la extensión). @chrisdew que es probablemente porque usted está usando un comodín, por lo que logrotate está tratando de girar tanto file.log y file.2014-01-07.log. Cualquiera que use un nombre fijo, o el uso de la olddir opción para mover rotar los archivos a un directorio diferente, por lo que no son recogidas por el comodín.
    • El dateformat opción provoca una violación de segmento para mí fedorahosted.org/logrotate/ticket/39
    • lamentablemente fedorahosted es un ex-servicio: «fedorahosted.org se retiró el 1 de Marzo de 2017».
  2. 23

    Para insertar la fecha en el nombre de archivo (y no como la extensión de un archivo en Linux, mientras que la rotación de un archivo es correcto usar:

    # Daily rotation
        daily
    
    # We keep original file live
        copytruncate
    
    # Rotation is 1 so we have always .1 as extension
        rotate 1
    
    # If file is missing keep working
        missingok
    
        sharedscripts
        postrotate
                day=$(date +%Y-%m-%d)
                mv blabla.csv.1 /var/www/gamelogs/dir/blabla$day.csv
        endscript
    }
    

    Esto es simple y funciona bien.

    • Me gusta esta solución. Si me sale bien, tiene un efecto secundario: logrotate ya no limitar el número de archivos guardados. Si la intención, eso está bien.
    • Es bastante fácil para agregar un find $logdir -mtime +$maxage -delete declaración a su postrotate secuencia de comandos.
    • así que, ¿cuál es el punto de la realidad utilizando logrotate, entonces?
    • No mucho, además de poner el log de rotación de código con otros de rotación de registros código, por lo que un futuro sysadmin puede arreglar para utilizar el dateext si y cuando la violación de segmento problema desaparece.
    • El rotate 1 es demasiado restrictiva.
    • Si sus registros se están moviendo muy rápido usted perderá algunos de los datos debido al uso de copytruncate. Hice algunas pruebas con seq y redirigir la salida a un archivo de registro y validado este.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea