sintaxis del archivo de configuración de logrotate: ¿son posibles varias entradas comodín?


83

Como la página del manual no responde mi pregunta y no quiero forzar un ciclo de rotación, decidí hacer la pregunta aquí.

La página del manual para logrotate da el siguiente ejemplo:

   "/var/log/httpd/access.log" /var/log/httpd/error.log {
       rotate 5
       mail www@my.org
       size 100k
       sharedscripts
       postrotate
           /usr/bin/killall -HUP httpd
       endscript
   }

Todos los ejemplos con comodines contienen solo una entrada. Ahora, lo que me interesa es si este también está permitido:

   /var/log/httpd/*.log /var/log/httpd/*/*.log {
       # ... same as above
   }

Aquí está el razonamiento: tengo múltiples vhosts y los dividí por el usuario que "posee" esos vhosts. Dado que los archivos de registro son legibles en todo el mundo, quiero unir y montar una carpeta en el directorio de inicio del usuario, pero limitarlo a los archivos de registro que el usuario "posee", lo que se logra más fácilmente al separar los registros en carpetas (y vincular -el montaje requiere ese esquema de todos modos). Así que estoy buscando una solución para rotar tanto los archivos de registro /var/log/httpdcomo todos los archivos de registro en los subdirectorios de ese directorio, sin tener que enumerar cada subdirectorio por nombre.

En general, la página de manual no da idea de si son posibles múltiples entradas para las reglas comodín o solo para rutas completas. Estoy usando logrotate versión 3.7.8-6 que viene con Debian "Squeeze", pero creo que esto no es necesariamente específico para una distribución o versión de programa.

Respuestas:


119

Sí, puedes usar varios comodines. Puede probar su archivo sin realizar las rotaciones reales haciendo esto:

logrotate -d -f /etc/logrotate.conf
  • -d = Activa el modo de depuración. En el modo de depuración, no se realizarán cambios en los registros ni en el archivo de estado de rotación de registros.

  • -f = Le dice a logrotate que fuerce la rotación, incluso si no cree que esto sea necesario. A veces esto es útil después de agregar nuevas entradas para rotar el registro, o si los archivos de registro antiguos se han eliminado a mano, ya que se crearán los nuevos archivos y el registro continuará correctamente.


3
¡muchas gracias! Solo lo intenté y funciona. De la salida parece que se puede esperar que los comodines funcionen como lo hacen en el shell.
0xC0000022L

24

Solo quería aclarar, porque eso es lo que obtuve aquí buscando cómo hacer,

Se pueden especificar múltiples archivos de registro para una sola configuración, por ejemplo

/var/log/httpd/access.log
/var/log/httpd/error.log
/var/log/httpd/mysite/*.log
{
    rotate 5
    mail nobody@example.org
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}

//, ¿No hay un problema con las diferentes rutas que ocurren en varias líneas?
Nathan Basanese

@NathanBasanese No entiendo su pregunta completamente, creo que puede señalar las líneas de ruta a los archivos en cualquier lugar del disco que desee, no todos tienen que estar en el mismo prefijo de directorio.
ThorSummoner

@NathanBasanese oh, creo que entiendo, tener múltiples objetivos de rotación de registros en diferentes líneas parece ser un uso normal, copié ese formulario de otros scripts logrotate.d, por ejemplo /etc/logrotate.d/rsyslog
ThorSummoner

5

Desde la página del manual para logrotate :

Tenga en cuenta que los nombres de los archivos de registro pueden estar entre comillas (y que las comillas son obligatorias si el nombre contiene espacios). Se aplican las reglas normales de comillas de shell, con ', "y \ caracteres compatibles.

Recuerde modificar o eliminar las comillas al pasar de patrones simples a múltiples:

Esto funciona:

/var/log/*.log /var/log/*.blog {

esto también funciona:

/var/log/*.log
/var/log/*.blog {

Esto no funciona:

'/var/log/*.log /var/log/*.blog' {

y tampoco esto:

"/var/log/*.log /var/log/*.blog" {

Compare con el caso de un solo patrón.

Esto funciona:

'/var/log/*.log' {

y esto también funciona:

"/var/log/*.log" {

Probado con logrotate 3.10.0


2
Sería interesante saber si esto funciona:"/var/space /log/*.log" "/var/log/*.blog"
KajMagnus
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.