我希望能够在很长一段时间内精确地每秒运行一个 UNIX 命令。
我需要一个解决方案,它在一段时间后不会落后,因为命令本身需要执行时间。sleep,watch和某个python 脚本在这方面都让我失望。
在诸如http://Arduino.cc之类的微控制器上,我会通过硬件时钟中断来做到这一点。我想知道是否有类似的时间精确的shell脚本解决方案。我在 StackExchange.com 中找到的所有解决方案,如果运行超过几个小时,都会导致明显的时间延迟。请参阅下面的详细信息。
我想通过nc每 1 秒通过(netcat)发送时间戳来测试我的网络连接是否持续连接。
发件人:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
Run Code Online (Sandbox Code Playgroud)
接收者:
nc -l -p $port > netcat-receiver.txt
Run Code Online (Sandbox Code Playgroud)
完成后,比较两个日志:
diff netcat-sender.txt netcat-receiver.txt
Run Code Online (Sandbox Code Playgroud)
差异将是未传输的时间戳。由此我可以知道我的 LAN / WAN / ISP 什么时候出问题。
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
Run Code Online (Sandbox Code Playgroud)
随着时间的推移获得一定的偏移量,因为循环中的命令也需要一点时间。
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
Run Code Online (Sandbox Code Playgroud)
经过的秒数:34520 …