Frage
Ich möchte in der Lage sein, über einen langen Zeitraum genau jede Sekunde einen UNIX-Befehl auszuführen .
Ich brauche eine Lösung, die nach einer bestimmten Zeit nicht zurückbleibt, weil der Befehl selbst für die Ausführung Zeit benötigt. sleep , watch und ein bestimmtes Python-Skript haben mich diesbezüglich alle im Stich gelassen.
Auf den Mikrocontrollern wie http://Arduino.cc würde ich das durch Hardware Clock Interrupts machen. Ich würde gerne wissen, ob es eine ähnliche zeitgenaue Shell-Skriptlösung gibt. Alle Lösungen, die ich in StackExchange.com gefunden habe, führten zu einer spürbaren Zeitverzögerung, wenn sie über Stunden ausgeführt wurden. Details siehe unten.
Praktischer Zweck / Anwendung
Ich möchte testen, ob meine Netzwerkverbindung ständig besteht, indem ich nc
alle 1 Sekunde Zeitstempel über (netcat) sende .
Absender:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
Empfänger:
nc -l -p $port > netcat-receiver.txt
Vergleichen Sie nach Abschluss die beiden Protokolle:
diff netcat-sender.txt netcat-receiver.txt
Die Unterschiede wären die nicht übertragenen Zeitstempel. Daraus würde ich wissen, wann mein LAN / WAN / ISP Probleme macht.
Lösung SCHLAFEN
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
Erhält einen bestimmten Versatz im Laufe der Zeit, da der Befehl innerhalb der Schleife auch etwas Zeit benötigt.
Präzision
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
Verstrichene Sekunden: 34520
wc -l timelog-sleep.txt
Zeilen in der Datei: 34243
Präzision zusammengefasst:
- 34520-34243 = 277 Zeitprobleme
- 34520/34243 = 1,008 = 0,8% Rabatt
Lösung PYTHON WIEDERHOLEN
Gefunden bei: Wiederholen Sie einen Unix-Befehl alle x Sekunden für immer
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
Soll den Zeitversatz vermeiden, tut dies aber nicht.
Präzision
wc -l timelog-repeat-py.txt
2012-07-16 13:42:44
[...]
2012-07-16 16:45:24
Verstrichene Sekunden: 10960
wc -l timelog-repeat-py.txt
Zeilen in der Datei: 10859
Präzision zusammengefasst:
- 10960-10859 = 101 Zeitprobleme
- 10960/10859 = 1,009 = 0,9% Rabatt
Lösung UHR
watch -n 1 "date '+%Y-%m-%d %H:%M:%S' >> ~/Desktop/timelog-watch.txt"
Präzision
wc -l timelog-watch.txt
2012-07-16 11:04:08
[...]
2012-07-16 13:25:47
Verstrichene Sekunden: 8499
wc -l timelog-watch.txt
Zeilen in der Datei: 8366
Präzision zusammengefasst:
- 8499-8366 = 133 Zeitprobleme.
- 8499/8366 = 1,016 = 1,6% Rabatt.
nice
den Prozess schläfst?