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 [email protected]
       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.

0xC0000022L
fuente

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.

Dennis Williamson
fuente
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 [email protected]
    size 100k
    sharedscripts
    postrotate
        /usr/bin/killall -HUP httpd
    endscript
}
ThorSummoner
fuente
//, ¿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

Piotr Dobrogost
fuente
2
Sería interesante saber si esto funciona:"/var/space /log/*.log" "/var/log/*.blog"
KajMagnus