Pergunta
Gostaria de poder executar um comando do UNIX precisamente a cada segundo por um longo período de tempo .
Eu preciso de uma solução, que não fique para trás depois de um certo tempo, por causa do tempo que o comando precisa para a execução. dormir , assistir , e um certo script python todos me falharam nesse aspecto.
No microcontrolador, como o link , eu faria isso através de interrupções de clock de hardware.
Gostaria de saber se existe uma solução semelhante de script de shell preciso no tempo. Todas as soluções que encontrei no StackExchange.com resultaram em um lapso de tempo perceptível, se forem executadas ao longo de horas. Veja os detalhes abaixo.
Propósito prático / aplicação
Eu quero testar se a minha conexão de rede está continuamente ativa, enviando timestamps via nc
(netcat) a cada 1 segundo.
Remetente:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
Receptor:
nc -l -p $port > netcat-receiver.txt
Após a conclusão, compare os dois logs:
diff netcat-sender.txt netcat-receiver.txt
Os diffs seriam os timestamps não transmitidos.
A partir disso, eu saberia a que horas minha LAN / WAN / ISP causaria problemas.
Solução SLEEP
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
Obtém um certo offset ao longo do tempo, pois o comando dentro do loop também demora um pouco.
Precisão
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
Segundos decorridos: 34520
wc -l timelog-sleep.txt
Linhas no arquivo: 34243
Precisão resumida:
- 34520-34243 = 277 problemas de tempo
- 34520/34243 = 1,008 = 0,8% de desconto
Solução REPETIÇÃO PYTHON
Encontrado em: Repita um comando Unix a cada x segundo para sempre
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
Deverá evitar o deslocamento de tempo, mas não o faz.
Precisão
wc -l timelog-repeat-py.txt
2012-07-16 13:42:44
[...]
2012-07-16 16:45:24
Segundos decorridos: 10960
wc -l timelog-repeat-py.txt
Linhas no arquivo: 10859
Precisão resumida:
- 10960-10859 = 101 problemas de tempo
- 10960/10859 = 1,009 = 0,9% de desconto
Solução RELÓGIO
watch -n 1 "date '+%Y-%m-%d %H:%M:%S' >> ~/Desktop/timelog-watch.txt"
Precisão
wc -l timelog-watch.txt
2012-07-16 11:04:08
[...]
2012-07-16 13:25:47
Segundos decorridos: 8499
wc -l timelog-watch.txt
Linhas no arquivo: 8366
Precisão resumida:
- 8499-8366 = 133 problemas de tempo.
- 8499/8366 = 1,016 = 1,6% de desconto.