Questão
Eu gostaria de poder executar um comando UNIX precisamente a cada segundo durante um longo período de tempo .
Preciso de uma solução, que não fique para trás depois de um certo tempo, devido ao tempo que o próprio comando precisa para execução. sleep , watch e um certo script python falharam comigo nesse aspecto.
No microcontrolador como o http://Arduino.cc, eu faria isso através de interrupções no relógio do hardware. Gostaria de saber se existe uma solução semelhante de script de shell com precisão de tempo. Todas as soluções que encontrei no StackExchange.com resultaram em um atraso de tempo notável, se executado durante horas. Veja os detalhes abaixo.
Finalidade prática / aplicação
Desejo testar se minha conexão de rede está continuamente ativada enviando registros de data e hora 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
As diferenças seriam os carimbos de hora não transmitidos. A partir disso, eu saberia a que horas minha LAN / WAN / ISP causa 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 deslocamento ao longo do tempo, pois o comando dentro do loop também leva um pouco de tempo.
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 temporização
- 34520/34243 = 1,008 = 0,8% de desconto
Solução REPETIR PYTHON
Encontrado em: Repita um comando Unix a cada x segundos para sempre
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
Supõe-se evitar o deslocamento de tempo, mas falha ao fazê-lo.
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 temporização
- 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 temporização.
- 8499/8366 = 1,016 = 1,6% de desconto.
nice
dorme no processo?