Puede perder algunas entradas de registro preciosas entre estas dos operaciones que sugirió. Yo no lo recomendaría.
Cleankod
Respuestas:
5
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 SIGHUPel 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).
¿Nohup puede usar una tubería en lugar de nohup.out?
Brian Minton
1
Puede usar la redirección de archivos (>) para generar un archivo que no sea nohup.out según la página de manual:To save output to FILE, use 'nohup COMMAND > FILE'
jas_raj
4
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.
Creo que truncar no liberará espacio en el disco hasta que se cierre el identificador de archivo.
symcbean
@symcbean Su creencia es incorrecta. Truncar el archivo libera el espacio inmediatamente.
kasperd
Logrotate copytruncate debería hacer el truco.
user9517
@Iain Los pasos que describo son equivalentes a copytruncatein logrotate. Pero nohup.outrara vez es el tipo de archivo en el que configuraría un trabajo cron para rotar.
kasperd
2
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 ).
Eso depende totalmente de si nohup se agrega a nohup.out línea por línea, o si mantiene un puntero a la ubicación de nohup.out. Consulte serverfault.com/questions/221337/… para ver un ejemplo.
pepoluan
1
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.
¡¡Y funcionó!! nohup.out se estaba truncando al obtener los nuevos anexos en el mismo archivo. El proceso tampoco murió. Y nohup.out-20190528se creó un nuevo nohup.out como este.
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 realizarSIGHUP
el proceso de flagelación sin tener que matar su aplicación en ejecución.fuente
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.
fuente
copytruncate
inlogrotate
. Peronohup.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 ).
fuente
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).
Desde la página de manual de logrotate .
fuente
Puedes hacer algo como esto:
No necesitas matar tu aplicación.
fuente
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í:
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
¡¡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.
fuente