質問
長期間にわたって正確に毎秒UNIXコマンドを実行できるようにしたいと思います。
コマンド自体が実行に必要な時間のため、一定の時間後に遅れないソリューションが必要です。sleep、watch、および特定のpythonスクリプトはすべてこの点で私を失敗させました。
http://Arduino.ccなどのマイクロコントローラでは、ハードウェアクロック割り込みを介してそれを行います。同様の時間精度のシェルスクリプトソリューションがあるかどうかを知りたいです。StackExchange.com内で見つけたすべてのソリューションでは、数時間以上実行すると、顕著なタイムラグが生じました。以下の詳細を参照してください。
実用目的/アプリケーション
nc
1秒ごとに(netcat)を介してタイムスタンプを送信することにより、ネットワーク接続が継続的にアップしているかどうかをテストしたいと思います。
送信者:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
レシーバー:
nc -l -p $port > netcat-receiver.txt
完了したら、2つのログを比較します。
diff netcat-sender.txt netcat-receiver.txt
差分は未送信のタイムスタンプになります。これにより、LAN / WAN / ISPがいつトラブルを起こすかがわかります。
ソリューションスリープ
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
ループ内のコマンドにも少し時間がかかるため、時間の経過とともに特定のオフセットを取得します。
精度
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
経過秒数:34520
wc -l timelog-sleep.txt
ファイル内の行:34243
要約された精度:
- 34520-34243 = 277タイミングの問題
- 34520/34243 = 1.008 = 0.8%オフ
ソリューションREPEAT PYTHON
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
時間オフセットを回避すると想定されていますが、そうしていません。
精度
wc -l timelog-repeat-py.txt
2012-07-16 13:42:44
[...]
2012-07-16 16:45:24
経過秒数:10960
wc -l timelog-repeat-py.txt
ファイル内の行:10859
要約された精度:
- 10960-10859 = 101タイミングの問題
- 10960/10859 = 1.009 = 0.9%オフ
ソリューションウォッチ
watch -n 1 "date '+%Y-%m-%d %H:%M:%S' >> ~/Desktop/timelog-watch.txt"
精度
wc -l timelog-watch.txt
2012-07-16 11:04:08
[...]
2012-07-16 13:25:47
経過した秒数:8499
wc -l timelog-watch.txt
ファイルの行:8366
要約された精度:
- 8499-8366 = 133タイミングの問題。
- 8499/8366 = 1.016 = 1.6%オフ。
nice
眠っているプロセスがどうなるのでしょうか?