
¿Hay alguna manera de mantener fijo el tamaño del archivo de registro sin rotarlo por un nuevo archivo vacío y eliminar (o archivar) el archivo antiguo? Por ejemplo, si configuro el tamaño máximo del archivo de registro en 1 MB, después de que el tamaño del archivo aumente más allá de ese límite, se bloqueará automáticamente, el texto se agregará en la "cola" y la parte más antigua del texto aparecerá para mantener el tamaño del archivo en 1 MB. .
Respuesta1
Podrías escribir un pequeño script bash para hacer esto. Simplemente siga el archivo hasta un cierto recuento de bytes tail -c
y sobrescriba el archivo.
de man tail
:
-c, --bytes=N
output the last N bytes; alternatively, use +N to output bytes
starting with the Nth of each file
If the first character of N (the number of bytes or lines) is a `+',
print beginning with the Nth item from the start of each file, other‐
wise, print the last N items in the file. N may have a multiplier suf‐
fix: b 512, kB 1000, K 1024, MB 1000*1000, M 1024*1024, GB
1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.
Respuesta2
Estoy seguro de que el cartel original ha encontrado una solución después de 8 años. Aquí hay otro para otros que puedan leer este hilo...
curtail limita el tamaño de la salida de un programa y conserva los últimos 200 MB de salida con el siguiente comando:
ejecutar_programa | reducir -s 200M miprograma.log
Respuesta3
Su única solución puede ser escribir su propio sistema de archivos de espacio de usuario o contribuir a uno existente. Mire la lista parcial enSistema de archivos en el espacio de usuario
Si no tienes las habilidades para contribuir, ofrece publicidad del proyecto o $$$ o ambos, para agregarlo por ti.
Ojalá tuviera tiempo para hacerlo, siempre quise algo exactamente como esto.
Respuesta4
Aquí está mi segunda respuesta. Este es un truco bastante complicado.
Utilice watch(1) para ejecutar repetidamente tail --bytes=1024
(los últimos 1024 bytes del archivo de registro, gracias a @jjclarkson por esa respuesta).
watch --no-title tail --bytes=1024 /var/log/messages >/tmp/messages.watch
Y luego vea el archivo con:
less --raw-control-chars /tmp/messages.watch
La diferencia entre watch
un bucle while y un bucle while es que watch
solo se actualizará /tmp/messages.watch si hubo cambios en /var/log/messages .
while true; do
tail --bytes=1024 /var/log/messages > /tmp/messages.watch
sleep 1
done
Y bueno, supongo que podrías poner un test
bucle while para que tail solo se ejecute si se actualizó /var/log/messages, pero no lo resolveré ahora.