Tengo una aplicación de Linux que escribe continuamente información de registro en un archivo de registro, por ejemplo. /var/log/application.log
. Como la aplicación no gira el archivo automáticamente, este archivo de registro puede alcanzar un tamaño de gigabytes en algunas semanas, por lo que quiero poder rotar este archivo correctamente
Mi principal preocupación aquí es que para rotar un archivo abierto por la aplicación en todo momento, probablemente necesite:
Mueva el archivo a su forma girada
/var/log/application.log -> /var/log/application.log.2013-01-28
Crea un vacío
/var/log/application.log
. Obs: en este punto, el proceso de solicitud todavía está escribiendo a/var/log/application.log.2013-01-28
Cambie el descriptor de archivo del proceso de solicitud para volver a apuntar a
/var/log/application.log
Entonces, ¿tengo razón? Si es así, ¿cómo puedo hacer esto? (principalmente el cambio de la parte del descriptor de archivo)
Si no lo soy, ¿cuál es la forma correcta y cómo hacerlo?
dup2
el nuevo descriptor sobre el anterior, luego cerrar el nuevo descriptor.)Respuestas:
Escribe una
logrotate
configuración para usarcopytruncate
fuente
La mayoría de estas aplicaciones responden a una señal, como
SIGHUP
, y cerrarán y volverán a abrir sus archivos de registro al recibir la señal. Consulte la documentación de su aplicación para ver la señal correcta para enviar.fuente