Rotando archivos de registros

El cuento de no acabar. Especialmente si son dos los que meten mano. Aviso ya que la entrada es un desahogo y seguramente muy sosa por los tecnicismos.

Recibo un correo como administrador que se queja de lo siguiente:

/etc/cron.daily/logrotate:
error: odoo:19 unknown group 'odoo-test'
error: found error in /var/log/odoo/odoo-server-test.log , skipping
error: odoo:28 unknown group 'odoo-beta'
error: found error in /var/log/odoo/odoo-server-beta.log , skipping

Y le echo un vistazo al directorio de registros porque no acabo de verlo claro.

-rw-r--r--  1 odoo odoo      846 nov 15 15:29 odoo-server.log.2019-11-14
-rw-r--r--  1 odoo odoo      745 nov 15 15:29 odoo-server.log.2019-11-13
-rw-r--r--  1 odoo odoo    16807 nov 18 18:21 odoo-server.log.2019-11-16
-rw-r--r--  1 odoo odoo   467837 nov 18 18:23 odoo-server.log.2019-11-15
drwxrwxrwx  2 odoo odoo     4096 nov 18 20:51 .
-rwxrwxrwx  1 root root      330 nov 19 03:18 odoo-backup.log
drwxrwxr-x 16 root syslog   4096 nov 19 06:25 ..
-rw-r--r--  1 odoo odoo     6320 nov 19 10:51 odoo-server.log
-rw-r--r--  1 odoo odoo     9910 nov 19 11:20 odoo-server.log.2019-11-17

Y compruebo que no existen archivos llamados odoo-server-test.log ni odoo-server-beta.log. Pues vale. ¿ Por qué hace referencia a ello ?

Le echo otro vistazo al archivo que define las rotaciones:

/var/log/odoo/odoo-server-test.log {
        daily
        rotate 4
        compress
        size 100M
        missingok
        create 0640 odoo-test odoo-test
}

Y veo que hace referencia a esos archivos pero de lo único que no se queja es de su no existencia. Normal, ya que es posible que se dé tal condición en estos contenidos.

Como me he dado cuenta de que el otro administrador ha creado odoo-backup.log con permisos diferentes pues intento respetarlo con lo siguiente:

/var/log/odoo/odoo-backup.log {
        monthly
        rotate 3
        compress 
        size 10M
        missingok
        create 0640 root root
}

/var/log/odoo/*.log {
        daily
        rotate 4
        compress
        size 100M
        missingok
        create 0640 odoo odoo 
}

Pensando en que irá de lo más específico a lo más genérico, ¿ verdad ? Pues no, un testeo me suelta lo siguiente:

root@erp:/etc/logrotate.d# logrotate -d ./odoo 
reading config file ./odoo
error: ./odoo:13 duplicate log entry for /var/log/odoo/odoo-backup.log

Handling 2 logs

rotating pattern: /var/log/odoo/odoo-backup.log  10485760 bytes (3 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/odoo/odoo-backup.log
error: skipping "/var/log/odoo/odoo-backup.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.

rotating pattern: /var/log/odoo/*.log  104857600 bytes (4 rotations)
empty log files are rotated, old logs are removed
No logs found. Rotation not needed.

No estás ayudando. Te das cuenta, ¿ verdad ?

Luego he descubierto que el archivo de registro lo crea un script para hacer copias por parte del otro administrador (encargado por el jefe, que ha perdido parte de su confianza en mí) y que los errores se pueden solucionar de la siguiente forma:

  1. Cambiando la propiedad y los permisos de /var/log/odoo a usuario y grupo root y permisos 0755.
  2. Concretando más la declaración de archivos a rotar y dejando sólo los dos, el que crea el programa odoo y el que crea el script de copia.
  3. Asegurándome de que la rotación crea archivos de registro con la propiedad adecuada para que los scripts puedan trabajar sobre ellos (usuario y grupo odoo).

Por lo que el archivo quedaría así:

/var/log/odoo/odoo-backup.log {
        monthly
        rotate 3
        compress 
        size 10M
        missingok
        create 0640 odoo odoo 
}

/var/log/odoo/odoo-server*.log {
        daily
        rotate 4
        compress
        size 100M
        missingok
        create 0640 odoo odoo 
}

Y la comprobación se resume ahora a explicar si debe o no rotarlos:

root@erp:/etc/logrotate.d# logrotate -d ./odoo 
reading config file ./odoo

Handling 2 logs

rotating pattern: /var/log/odoo/odoo-backup.log  10485760 bytes (3 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/odoo/odoo-backup.log
  log does not need rotating

rotating pattern: /var/log/odoo/odoo-server*.log  104857600 bytes (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/odoo/odoo-server.log
  log does not need rotating

Y, bueno, todos felices hasta la próxima en que volvamos a chocar.