Pytanie
Chciałbym móc uruchomić polecenie UNIX dokładnie co sekundę przez długi czas .
Potrzebuję rozwiązania, które nie pozostaje w tyle po pewnym czasie, ponieważ czas potrzebny na wykonanie samego polecenia. spanie , oglądanie i pewien skrypt Pythona zawiodły mnie pod tym względem.
Na mikrokontrolerze, takim jak http://Arduino.cc , zrobiłbym to przez przerwania zegara sprzętowego. Chciałbym wiedzieć, czy istnieje podobne precyzyjne rozwiązanie skryptów powłoki. Wszystkie rozwiązania, które znalazłem w StackExchange.com, spowodowały zauważalne opóźnienie, jeśli działały przez wiele godzin. Szczegóły poniżej.
Praktyczny cel / zastosowanie
Chcę sprawdzić, czy moje połączenie sieciowe jest stale nc
aktywne, wysyłając znaczniki czasu za pośrednictwem (netcat) co 1 sekundę.
Nadawca:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
Odbiorca:
nc -l -p $port > netcat-receiver.txt
Po zakończeniu porównaj dwa dzienniki:
diff netcat-sender.txt netcat-receiver.txt
Różnice byłyby nieprzesłanymi znacznikami czasu. Z tego wiedziałbym, o której godzinie mój LAN / WAN / ISP sprawia problemy.
Rozwiązanie SLEEP
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
Pobiera pewne przesunięcie w czasie, ponieważ polecenie w pętli również zajmuje trochę czasu.
Precyzja
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
Upłynęły sekundy: 34520
wc -l timelog-sleep.txt
Linie w pliku: 34243
Precyzja podsumowana:
- 34520-34243 = 277 problemów z synchronizacją
- 34520/34243 = 1,008 = 0,8% zniżki
Rozwiązanie POWTÓRZ PYTHON
Znalezione w: Powtarzaj polecenie Unix co x sekund na zawsze
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
Zakłada się, aby uniknąć przesunięcia czasowego, ale tego nie robi.
Precyzja
wc -l timelog-repeat-py.txt
2012-07-16 13:42:44
[...]
2012-07-16 16:45:24
Upłynęły sekundy: 10960
wc -l timelog-repeat-py.txt
Linie w pliku: 10859
Precyzja podsumowana:
- 10960-10859 = 101 problemów z synchronizacją
- 10960/10859 = 1,009 = 0,9% zniżki
ROZWIĄZANIE ROZWIĄZANIA
watch -n 1 "date '+%Y-%m-%d %H:%M:%S' >> ~/Desktop/timelog-watch.txt"
Precyzja
wc -l timelog-watch.txt
2012-07-16 11:04:08
[...]
2012-07-16 13:25:47
Upłynęły sekundy: 8499
wc -l timelog-watch.txt
Linie w pliku: 8366
Precyzja podsumowana:
- 8499-8366 = 133 problemy z synchronizacją.
- 8499/8366 = 1.016 = 1,6% zniżki.
nice
śpiący?