a script to log […] every 5 seconds […] I need timestamps […] a loop […] the file gets to a certain size
Você deseja uma ferramenta que receba como entrada a saída de log do programa principal, que a grava em um arquivo de log com tamanho limitado e adicione registros de data e hora. Existem ferramentas que fazem isso e muito mais. O "mais" que eles fazem é a rotação automática do arquivo de log que também é acionável sob demanda, mantendo um diretório de log com tamanho reduzido dos arquivos de log atuais e antigos.
Você tem várias opções de ferramentas:
Suponha que um utilitário de longa execução imprima sua saída de log desejada a cada poucos segundos, algo como:
#!/bin/sh
# monitor-sensors
exec 2>&1
while true
do
sensors
sleep 5
done | grep --line-buffered -- '^Core'
O uso é tão simples como:
-
monitor-sensors | cyclog ./temps
-
monitor-sensors | multilog t ./temps
e pode ser facilmente ajustado:
-
monitor-sensors | cyclog --max-file-size 32768 --max-total-size 1048576 ./temps
-
monitor-sensors | s6-log t s32768 S1048576 ./temps
-
monitor-sensors | multilog t s32768 n5 ./temps
A partir daqui, usando conjuntos de ferramentas como daemontools-encore / runit / perp / s6 / nosh, é apenas um pequeno passo para mover os lados esquerdo e direito deste canal para run
programas e executá-lo como um par vinculado dos daemons reais.
Mas todos eles podem, também, manipular o fato de ser convertido para saída única em diretórios de log existentes, se você quiser (digamos) executar invocações únicas a partir de uma linha de comando.
Algumas dessas ferramentas podem fazer outras formas de registro de data e hora, mas todas podem fazer registros de data e hora TAI64N. Os timestamps TAI64N são projetados para serem capazes de precisão de nanossegundos, embora alguns dos mencionados anteriormente não implementem bem isso; são projetados para lidar com coisas como segundos bissextos, contanto que seu banco de dados TZ saiba sobre eles; e são triviais para sort
, ou mesmo sort -m
.
Converta de timestamps TAI64N para a hora local do seu fuso horário atual (ou, dado que é apenas a variável de ambiente TZ
, um fuso horário arbitrário à sua escolha) usando ferramentas como:
Assista a esses registros enquanto eles são escritos com:
-
tail -F
, embora tail
tenha problemas conhecidos quando há rotações muito rápidas. (Esse é um dos vários problemas conhecidos com tail
. Outros problemas conhecidos, incluindo o truncamento no local de arquivos de log que são rapidamente seguidos por mais dados de log. Esse problema pode ser acionado por sistemas inferiores, como logrotate
. as ferramentas acima mencionadas não truncam os arquivos depois de estarem totalmente gravados e não arriscam esses problemas adicionais tail
.
- Meu
follow-log-directories
do nosh, que "conhece" esse tipo de registra o diretório e usa um "cursor" (mantido persistentemente no disco) para rastrear de forma confiável a posição no diretório de log para continuar, mesmo que várias rotações aconteçam quando o seguidor de log não está procurando.
Outros tipos de processamento podem ser feitos com ferramentas como:
Leitura adicional