Domanda
Mi piacerebbe poter eseguire un comando UNIX esattamente ogni secondo per un lungo periodo di tempo .
Ho bisogno di una soluzione, che non è in ritardo dopo un certo tempo, a causa del tempo necessario al comando stesso per l'esecuzione. sleep , watch e un certo script Python mi hanno deluso in questo senso.
Su un microcontrollore come http://Arduino.cc lo farei tramite interruzioni di clock hardware. Mi piacerebbe sapere se esiste una simile soluzione di script di shell precisa nel tempo. Tutte le soluzioni che ho trovato all'interno di StackExchange.com hanno comportato un notevole ritardo, se eseguito per ore. Vedi i dettagli di seguito.
Scopo / applicazione pratica
Voglio verificare se la mia connessione di rete è continuamente attiva inviando timestamp via nc
(netcat) ogni 1 secondo.
Mittente:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
Ricevitore:
nc -l -p $port > netcat-receiver.txt
Dopo il completamento, confrontare i due registri:
diff netcat-sender.txt netcat-receiver.txt
Le differenze sarebbero i timestamp non trasmessi. Da questo vorrei sapere a che ora la mia LAN / WAN / ISP crea problemi.
Soluzione DORMIRE
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
Ottiene un certo offset nel tempo, poiché anche il comando all'interno del ciclo richiede un po 'di tempo.
Precisione
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
Secondi trascorsi: 34520
wc -l timelog-sleep.txt
Righe nel file: 34243
Riepilogo di precisione:
- 34520-34243 = 277 problemi di temporizzazione
- 34520/34243 = 1.008 = 0.8% di sconto
Soluzione REPEAT PYTHON
Trovato su: ripetere un comando Unix ogni x secondi per sempre
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
Presumibilmente per evitare il time offset, ma non riesce a farlo.
Precisione
wc -l timelog-repeat-py.txt
2012-07-16 13:42:44
[...]
2012-07-16 16:45:24
Secondi trascorsi: 10960
wc -l timelog-repeat-py.txt
Righe nel file: 10859
Riepilogo di precisione:
- 10960-10859 = 101 problemi di temporizzazione
- 10960/10859 = 1.009 = 0.9% di sconto
Soluzione WATCH
watch -n 1 "date '+%Y-%m-%d %H:%M:%S' >> ~/Desktop/timelog-watch.txt"
Precisione
wc -l timelog-watch.txt
2012-07-16 11:04:08
[...]
2012-07-16 13:25:47
Secondi trascorsi: 8499
wc -l timelog-watch.txt
Righe nel file: 8366
Riepilogo di precisione:
- 8499-8366 = 133 problemi di temporizzazione.
- 8499/8366 = 1.016 = 1.6% di sconto.
nice
il processo che dorme?