Ok, este es un caso de uso muy práctico desde mi punto de vista.
Digamos que tengo un simple shell oneliner que registra la salida en un archivo. Esto puede ser simplemente cualquier cosa, por ejemplo tcpdump. ¿Hay alguna forma genérica y trivial, para asegurarse, de que el archivo de salida no exceda el tamaño dado?
Resonando detrás de esto, es proteger de llenar todo el espacio disponible en el punto de montaje por error. Si me olvido del script, o producirá GB de datos por hora, entonces esta simple tarea de depuración puede conducir a un posible bloqueo del sistema.
Ahora, conozco las opciones compiladas en algunas de las herramientas (como la combinación de -W / -C en tcpdump). Lo que necesito es un sistema de seguridad muy genérico.
Larga historia corta: cuando ejecuto un script como:
% this -is --my=very|awsome|script >> /var/tmp/output.log
Cómo asegurarse de que output.log nunca sea más grande que 1GB.
El script puede bloquearse, ser asesinado o lo que sea.
La solución que busco debe ser fácil y simple, utilizando solo herramientas disponibles en distribuciones populares como ubuntu / debian / fedora. En general algo ampliamente disponible. El complicado programa multilínea no es una opción aquí, independientemente del idioma / tecnología.
tail -c 1G
también funciona, útil para mirar la cola de un evento. Es comprensible que se sonroje después del final del comando.Establezca el tamaño máximo de archivo para un usuario que solo se utilizará para ejecutar estos scripts.
El archivo
/etc/security/limits
limita a un usuario con los valores de "predeterminado" a menos que haya valores explícitos para un usuario específico. Estos valores específicos del usuario sobrescribirán los valores predeterminados. El archivo puede tener un nombre ligeramente diferente dependiendo de su sistema operativo.Si su usuario de registro se llama log_maker, agregue esta línea al archivo:
log_maker hard fsize 1000000
El número después de fsize es el tamaño máximo de archivo en KB.
fuente
la limitación limita el tamaño de la salida de un programa y conserva los últimos X KB de salida con el siguiente comando:
run_program | curtail -s 1G myprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
NOTA: Soy el mantenedor del repositorio anterior. Simplemente compartiendo la solución ...
fuente
Puede limitar cualquier archivo con
Escribir la cola directamente en el mismo archivo crea un archivo vacío. Por lo tanto, debe usar un archivo temporal.
fuente