小编por*_*org的帖子

以非常短的时间间隔精确运行 unix 命令,而不会随着时间的推移累积时间延迟

我希望能够在很长一段时间内精确地每秒运行一个 UNIX 命令。

我需要一个解决方案,它在一段时间后不会落后,因为命令本身需要执行时间。sleepwatch和某个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 …

cron real-time

38
推荐指数
6
解决办法
1万
查看次数

标签 统计

cron ×1

real-time ×1