Ok, este é um caso de uso muito prático do meu ponto de vista.
Digamos que eu tenha um shell oneliner simples que registre a saída em um arquivo. Isso pode ser simplesmente qualquer coisa, por exemplo, tcpdump. Existe alguma maneira genérica e trivial, para garantir que o arquivo de saída não exceda o tamanho especificado?
A ressonância por trás disso é proteger por engano todo o espaço disponível no ponto de montagem. Se eu esquecer o script, ou ele produzirá GBs de dados por hora, essa tarefa de depuração simples poderá levar a uma possível falha do sistema.
Agora, estou ciente das opções construídas em algumas das ferramentas (como a combinação de -W / -C no tcpdump). O que eu preciso é de um antivírus muito genérico.
Longa história - quando executo um script como:
% this -is --my=very|awsome|script >> /var/tmp/output.log
Como garantir que o output.log nunca fique maior que 1 GB.
Script pode falhar, ser morto ou o que for.
A solução que estou procurando deve ser fácil e simples, usando apenas ferramentas disponíveis em distros populares como o ubuntu / debian / fedora. Em geral, algo amplamente disponível. O programa complicado e multilinha não é uma opção aqui, independentemente do idioma / tecnologia.
tail -c 1G
também funciona, útil olhar para a cauda de um evento. Compreensivelmente, ele libera após o final do comando.Defina o tamanho máximo do arquivo para um usuário que será usado apenas para executar esses scripts.
O arquivo
/etc/security/limits
limita um usuário com os valores "padrão", a menos que haja valores explícitos para um usuário específico. Esses valores específicos do usuário substituirão os valores padrão. O arquivo pode ter um nome ligeiramente diferente, dependendo do seu sistema operacional.Se o seu usuário de log tiver o nome log_maker, adicione esta linha ao arquivo:
log_maker hard fsize 1000000
O número após fsize é o tamanho máximo do arquivo em KB.
fonte
O corte reduz o tamanho da saída de um programa e preserva os últimos X KB da saída com o seguinte comando:
run_program | curtail -s 1G myprogram.log
https://github.com/Comcast/Infinite-File-Curtailer
NOTA: Sou o mantenedor do repositório acima. Apenas compartilhando a solução ...
fonte
Você pode limitar qualquer arquivo com
Escrever a cauda diretamente no mesmo arquivo cria um arquivo vazio. Então você precisa usar um arquivo temporário.
fonte