Soru
Uzun bir süre boyunca her saniye tam olarak bir UNIX komutu çalıştırabilmek istiyorum .
Komutun yürütülmesi için ihtiyaç duyduğu süre nedeniyle belirli bir süre sonra geride kalmayan bir çözüme ihtiyacım var. uyku , izle ve belirli bir python betiği bu konuda başarısız oldu.
Http://Arduino.cc gibi mikrodenetleyicilerin üzerinde bunu donanım saatinde keserdim . Benzer bir zaman hassas kabuk betiği çözümü olup olmadığını bilmek istiyorum. StackExchange.com'da bulduğum tüm çözümler, eğer saatler içinde çalıştırılırsa gözle görülür bir gecikmeye neden oldu. Aşağıdaki ayrıntılara bakınız.
Pratik amaç / uygulama
nc
Her 1 saniyede bir (netcat) üzerinden zaman damgası göndererek ağ bağlantımın sürekli kurulup kurulmadığını test etmek istiyorum .
Gönderen:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
Alıcı:
nc -l -p $port > netcat-receiver.txt
Tamamlandıktan sonra iki kütüğü karşılaştırın:
diff netcat-sender.txt netcat-receiver.txt
Farklılıklar, aktarılmamış zaman damgaları olacaktır. Bundan ne zaman LAN / WAN / ISS'imin ne zaman sorun çıkardığını bilirim.
Çözüm SLEEP
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
Döngü içindeki komut da biraz zaman aldığından, zamanla belirli bir kayma alır.
Hassas
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
Geçen Saniye: 34520
wc -l timelog-sleep.txt
Dosyadaki satırlar: 34243
Kesin özet:
- 34520-34243 = 277 zamanlama sorunları
- 34520/34243 = 1.008 =% 0.8 indirim
Çözüm REPEAT PYTHON
Bulunan: Sonsuza dek her x saniyede bir Unix komutunu tekrarla
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
Zaman ofsetinden kaçınması gerekiyor, ancak bunu yapmıyor.
Hassas
wc -l timelog-repeat-py.txt
2012-07-16 13:42:44
[...]
2012-07-16 16:45:24
Geçen saniye: 10960
wc -l timelog-repeat-py.txt
Dosyadaki satırlar: 10859
Kesin özet:
- 10960-10859 = 101 zamanlama sorunları
- 10960/10859 = 1.009 =% 0.9 indirim
Çözüm İZLE
watch -n 1 "date '+%Y-%m-%d %H:%M:%S' >> ~/Desktop/timelog-watch.txt"
Hassas
wc -l timelog-watch.txt
2012-07-16 11:04:08
[...]
2012-07-16 13:25:47
Geçen saniye: 8499
wc -l timelog-watch.txt
Dosyadaki satırlar: 8366
Kesin özet:
- 8499-8366 = 133 zamanlama problemi.
- 8499/8366 = 1.016 =% 1.6 indirim.
nice
Uyuyan süreç sizde ne olur ?