Estou tentando escrever um script Unix que irá truncar / esvaziar um arquivo que está continuamente sendo escrito / aberto por um aplicativo quando atinge, digamos, 3 GB de espaço. Eu sei que o comando abaixo faria isso:
cp /dev/null [filename]
Mas vou executar isso em um ambiente de produção automaticamente como um cron job - apenas postando aqui para ver se vocês enfrentaram algum problema ao fazer algo semelhante a isso.
logrotate
, pode fornecer algum valor (mas ser chato com a configuração (apenas adivinhando)!).Respostas:
Só para adicionar outra resposta,
:
é um ambiente autônomo no bash (compatível com POSIX), então isso basicamente abre o arquivo para gravação (o que obviamente trunca o arquivo) e o fecha imediatamente.EDITAR: como comentou shellter, você não precisa de um comando para acompanhar o redirecionamento:
$ echo foo > foo.txt $ cat foo.txt foo $ > foo.txt $ cat foo.txt $
Um simples redirecionamento por si só limpará o arquivo.
fonte
> filename
(como tenho certeza que você sabe). Boa sorte a todos.Eu usei o seguinte comando no debian
fonte
sudo sh -c ': > filename'
tambémfilename
sudo
:sudo cp /dev/null filename
. Tambémcp
é portátil, enquantotruncate
o Linux moderno é apenas.Isso me parece razoável. O Unix, é claro, permite que você faça isso de cerca de 50 maneiras diferentes. Por exemplo,
echo -n "" >filename cat /dev/null >filename
fonte
trunc filename
funciona no tipo AIX do UNIX
fonte