Actualmente estamos actualizando Ubuntu 12.04 LTS a 14.04 LTS en nuestros servidores de aplicaciones ruby on rails, y hemos notado que los archivos de registro ya no están girando.
En ambas máquinas tenemos un archivo /var/app-name/config/logrotate
propiedad de nuestro usuario de Unix deployer
que contiene un archivo logrotate válido de la siguiente manera:
/var/app-name/log/*.log {
daily
rotate 365
delaycompress
compress
dateext
dateformat -%Y%m%d
missingok
copytruncate
}
Esto luego se enlaza simbólicamente al /etc/logrotate.d/
directorio comoapp-name
En nuestro servidor Ubuntu 12.04 tenemos logrotate 3.7.8 que funciona bien. Entra en el var/app-name/log/
directorio y gira todos los archivos de registro
Pero en el servidor Ubuntu 14.04 tenemos logrotate 3.8.7 que no rota los archivos de registro para nuestra aplicación.
Cuando depuro esto a través sudo logrotate -d -f /etc/logrotate/.conf
, obtengo el siguiente resultado:
Ignoring /etc/logrotate.d/app-name because the file owner is wrong (should be root).
Persiguiendo esto en el código, parece que este cambio se agregó para la secuencia de lanzamiento 3.8.x: https://github.com/demands/logrotate/commit/b8ce386a969c60e5c8ee78023c24a1ba0aab1526
Si cambio la propiedad del archivo vinculado /var/app-name/config/logrotate
a, root
entonces comienza a funcionar nuevamente. Pero dado que este archivo es parte de mi aplicación, y creado por el marco de implementación de capistrano que usamos en este estado, prefiero no tener que alterar su propiedad, cuando solía funcionar bien.
Entonces, ¿los archivos de configuración con enlaces simbólicos son recomendados / admitidos por logrotate?
Y si es así, ¿debería verse como un error el deployer
rechazar el uso de mi archivo (propiedad de ) que está enlazado en el /etc/logrotate.d
directorio?
¿O hay otro enfoque recomendado para la rotación de registros específicos de la aplicación?
(también preguntado en unix StackExchange )
fuente
Respuestas:
El problema es que un archivo de configuración logrotate puede ejecutar cualquier comando como root (usando estrofas prerotate / postrotate). Por lo tanto, efectivamente estaría otorgando a su
deployer
usuario privilegios de root al darle acceso de escritura a los archivos/etc/logrotate.d/
. Entonces no, no es un error.Si confía en su usuario de despliegue, entonces supongo que podría resolver el problema otorgándole los derechos sudo para copiar archivos
/etc/logrotate.d/
. Asumiendo, por supuesto, que el usuario implementador no es el mismo usuario con el que se ejecuta la aplicación web.fuente
Me doy cuenta de que llego tarde a la fiesta, pero estaba teniendo un problema similar y pensé en compartir mi solución.
Mis problemas comenzaron cuando
logrotate
no leí la configuración que había escrito. No quería implementar nuevas configuraciones en una carpeta propiedad de root porque no quería que el usuario de implementación tuviera acceso root a nada .Al principio traté de ejecutar
logrotate
como usuario de implementación, pero se quejó de tener acceso al archivo de estado en/var/lib/logrotate/state
. Entonces leí la página del manual. ¡Puede especificar el archivo de estado quelogrotate
usa! Por lo tanto, me pareció una mejor solución para configurar un cron diario para ejecutarlogrotate
como usuario de implementación con un archivo de estado personalizado. De esta forma, el usuario de implementación o la aplicación no necesitan acceso a la raíz.A continuación se explica cómo se especifica el archivo de estado:
¡Ahora puede ejecutar logrotate como cualquier usuario y propietario de la configuración que desee!
fuente