
Existe alguma maneira de manter fixo o tamanho do arquivo de log sem girá-lo por um novo arquivo vazio e excluir (ou arquivar) o arquivo antigo. Por exemplo, se eu definir o tamanho máximo do arquivo de log para 1 MB, após o tamanho do arquivo aumentar além desse limite, ele será automaticamente fixado, o texto será adicionado na 'cauda' e a parte mais antiga do texto será exibida para manter o tamanho do arquivo em 1 MB. .
Responder1
Você poderia escrever um pequeno script bash para fazer isso. Basta seguir o arquivo até uma determinada contagem de bytes usando tail -c
e sobrescrever o arquivo.
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.
Responder2
Tenho certeza de que o autor da postagem original encontrou uma solução após 8 anos. Aqui está outro para outros que possam ler este tópico ...
cercear limita o tamanho da saída de um programa e preserva os últimos 200 MB de saída com o seguinte comando:
programa_executado | restringir -s 200M meuprograma.log
Responder3
Sua única solução pode ser escrever seu próprio sistema de arquivos no espaço do usuário ou contribuir para um já existente. Veja a lista parcial emSistema de arquivos no espaço do usuário
Se você não tem as habilidades necessárias para contribuir, ofereça publicidade ao projeto ou $$$ ou ambos, para adicioná-lo para você.
Eu gostaria de ter tempo para fazer isso, sempre quis algo exatamente assim.
Responder4
Aqui está minha segunda resposta. Isso é bastante hackeado.
Use watch(1) para executar repetidamente tail --bytes=1024
(os últimos 1024 bytes do arquivo de log, obrigado a @jjclarkson por essa resposta).
watch --no-title tail --bytes=1024 /var/log/messages >/tmp/messages.watch
E então visualize o arquivo com:
less --raw-control-chars /tmp/messages.watch
A diferença entre watch
e um loop while é que watch
só atualizará /tmp/messages.watch se houver alterações em /var/log/messages .
while true; do
tail --bytes=1024 /var/log/messages > /tmp/messages.watch
sleep 1
done
E bem, acho que você poderia colocar um test
loop while para que tail só seja executado se /var/log/messages for atualizado, mas não vou descobrir isso agora.