Mi nohup.out
archivo está creciendo rápidamente.
Estoy ejecutando una aplicación en segundo plano, está escribiendo un nohup.out
archivo,
ahora necesito rotar el nohup.out
archivo sin matar mi aplicación. Se puede hacer esto?
Mi nohup.out
archivo está creciendo rápidamente.
Estoy ejecutando una aplicación en segundo plano, está escribiendo un nohup.out
archivo,
ahora necesito rotar el nohup.out
archivo sin matar mi aplicación. Se puede hacer esto?
Respuestas:
Deberías echar un vistazo a flog en combinación con logrotate
. Si canaliza la salida de su aplicación a través de esto, puede realizar SIGHUP
el proceso de flagelación sin tener que matar su aplicación en ejecución.
flog (registrador de archivos) es un programa que lee la entrada de STDIN y escribe en un archivo.
Si se recibe SIGHUP, el archivo se volverá a abrir, permitiendo la rotación del registro [ver logrotate (8) en RH].
El archivo de registro solo se volverá a abrir si flog detecta que se ha producido una rotación (es decir, si el archivo anterior desapareció o si se cambió el inodo). flog es extremadamente pequeño (huella de memoria de menos de 500 bytes).
To save output to FILE, use 'nohup COMMAND > FILE'
No puedes rotarlo. Puede truncarlo con el comando >nohup.out
, que eliminará todo el contenido del archivo.
Puede copiar el archivo primero y luego truncarlo, si necesita guardar la salida. Pero hay una pequeña ventana para una carrera, donde la salida se puede escribir después de copiar el archivo pero antes de truncarlo. Cualquier salida escrita durante esa ventana se perderá para siempre.
copytruncate
in logrotate
. Pero nohup.out
rara vez es el tipo de archivo en el que configuraría un trabajo cron para rotar.
No puedes
Puede desvincular el archivo (rm) pero los datos aún tienen una huella en el disco y se seguirán escribiendo mientras exista un identificador de archivo abierto.
Puede cambiar el nombre del archivo, pero nuevamente esto no impide que se escriba (pero si está iniciando trabajos en segundo plano regularmente, los más nuevos escribirán en el mismo archivo).
Realmente debe redirigir explícitamente la salida del trabajo a algo diseñado para manejar esto (por ejemplo, apache rotatelogs ).
Logrotate tiene una opción copytruncate disponible, que truncará (vaciará) su archivo especificado después de que se haya copiado en el esquema de rotación normal (y compresión, si está configurado).
copytruncate
Truncate the original log file in place after creating a copy,
instead of moving the old log file and optionally creating a new
one, It can be used when some program can not be told to close
its logfile and thus might continue writing (appending) to the
previous log file forever. Note that there is a very small time
slice between copying the file and truncating it, so some log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
Desde la página de manual de logrotate .
Puedes hacer algo como esto:
cp nohup.out nohup.out.save # save it somewhere
echo "" > nohup.out
No necesitas matar tu aplicación.
No estoy seguro si llego demasiado tarde en esto. Pero para otros que ahora se topan con este foro, no tuve que probar nada con flog ni nada.
Mi trabajo comienza simplemente así:
nohup <my process> &
Esto inicia mi trabajo y comienza a agregar un nohup.out en ese directorio.
Todo lo que tenía que hacer era configurar un logrotate que generalmente viene con la distribución y configurar algo como esto en /etc/logrotate.conf
~/my abosolute path/nohup.out {
size 1024k
copytruncate
rotate 100
maxage 100
}
¡¡Y funcionó!! nohup.out se estaba truncando al obtener los nuevos anexos en el mismo archivo. El proceso tampoco murió. Y nohup.out-20190528
se creó un nuevo nohup.out como este.
Espero que esto ayude.