Mi observación de logrotate es que para rotar cualquier archivo de registro, el proceso logrotate, en el siguiente orden
- copia el archivo de registro en cuestión (llamémoslo archivo1.log) con un nuevo nombre (agregando una marca de tiempo o un número al nombre existente para que se convierta en archivo1.log-20140513),
- elimina el archivo existente (archivo1.log) y crea un nuevo archivo de registro en blanco con el nombre original (archivo1.log),
- comprime el archivo rotado (file1.log-20140513), lo que crea un nuevo archivo comprimido (file1.log-20140513.gz), si la opción de compresión está configurada,
- elimina el archivo rotado (file1.log-20140513), y finalmente,
- pase al siguiente archivo para hacer lo mismo con los 4 pasos anteriores.
Tengo el siguiente problema con este proceso:
- Mis archivos de registro son enormes (más de 10 Gb cada uno) y tengo alrededor de 42 archivos de registro de este tipo.
- Los procesos que escriben en estos archivos funcionan sincronizados,
- El DiskIO en el servidor es bueno, pero aún así, copiar lleva tiempo y comprimir también lleva tiempo y la compresión también consume CPU.
- Quiero que todos los archivos de registro recién creados tengan registros que comiencen al mismo tiempo.
Para hacer eso, quiero que logrotate se mueva, algo que hace el comando mv, que cambia el nombre de los archivos en lugar de copiarlos. En cuanto a la compresión, puedo desactivarla y activarla mediante un script diferente programado mediante cron. Pero quiero que logrotate mueva los archivos en lugar de copiarlos.
Ahora, estoy seguro de que esto es algo que los autores de logrotate también habrían pensado, ya que obviamente ahorra E/S del disco y el tiempo necesario para completar toda la operación de logrotate, así que quiero saber por qué se copian los archivos en lugar de moverlos o cambiarles el nombre, y cómo ¿Lo logro a través de logrotate?
NOTA: Intenté hacerlo manualmente, es decir, mover el archivo en el que también estaba escribiendo un proceso en ejecución y crear un nuevo archivo en blanco con el mismo nombre y los mismos permisos (que es root, que también es el permiso que tiene el proceso). ejecutándose con), pero después de mover y crear un nuevo archivo, vi que el proceso no escribía nada en él, por lo que tuve que reiniciar el proceso para que escribiera en ese archivo. ¿Alguien puede explicar este comportamiento también y por qué logrotate logra que el proceso escriba en el mismo archivo pero no puedo seguir los pasos simples?
Respuesta1
El comportamiento que está describiendo solo ocurre si a logrotate se le ha indicado explícitamente que lo haga a través de la copytruncate
directiva. La documentación advierte sobre la posibilidad de perder algunos datos de registro debido a este comportamiento. Esta directiva sólo debería utilizarse como último recurso.
El método estándar para rotar archivos de registro es cambiar el nombre y luego enviar una señal al proceso para permitirle abrir el nuevo archivo de registro. Esto es más rápido y no corre el riesgo de perder parte del registro. Pero requiere el proceso de escritura para poder cambiar a un nuevo archivo de registro.
La compresión se puede desactivar o posponer hasta la siguiente rotación. Si compress
se utiliza la directiva, los archivos de registro antiguos se comprimen. Si no se utiliza esa directiva, no se comprimen.
Si se utilizan ambos compress
y , la compresión se retrasa hasta la siguiente rotación. delaycompress
De esa manera, después de cada rotación, los dos archivos de registro más nuevos aún no se habrán comprimido.
Respuesta2
después de mover y crear un nuevo archivo, vi que el proceso no escribía nada en él, así que tuve que reiniciar el proceso para que escribiera en ese archivo.
El proceso es escribir en el mismo archivo, por eso logra copiar en lugar de mover. Cuando elimina el registro, el proceso aún escribe en el registro y puede ver crecer el uso del sistema de archivos, pero ningún archivo. El reinicio del proceso liberará espacio en el disco.
considera
- escriba menos en los registros, ¿es necesaria toda la información registrada?
- leer la documentación, por ejemplo:http://www.thegeekstuff.com/2010/07/logrotate-examples/