我想在两台(或更多)有线网络Linux机器之间同步两个事件。我可以使用NTP来做到这一点吗?
NTP似乎主要集中在与时间服务器同步,我需要两台机器相互同步。那里有一个微妙的区别。例如,如果一台机器的位置与时间服务器中的第二台机器相同,如果我尝试直接将两台机器同步,而不是同时将它们同步到时间服务器,我可能会获得更好的同步
一个稍微不同的问题:如果我使用NTP,那么安排事件的最佳方法是什么?一个cronjob或脚本?如果我使用像this one这样的库,我可以获得更好的(次秒)同步。
最后,是否有人知道任何时间同步软件包适合将两台(或多台)机器同步在一起,而不一定与时间服务器同步。
感谢您的帮助。
答案 0 :(得分:2)
您可以尝试将一台计算机委派为主计算机,将其余计算机委派为从属计算机。当发生同步事件时,主设备会触发从设备启动。
同步仅受机器间延迟(ping)的限制,您无需担心系统时钟的一致性。
答案 1 :(得分:0)
主机之间的ping延迟变化是什么?协调过程之间的起始时间差异是什么样的?如何开始流程? Cron非常不精确,也需要考虑流程的启动时间。
如果不同主机的ping时间差异很大,我会做这样的事情。
使用可靠的公共NTP服务器在事件发生前几分钟同步所有协调主机上的时钟。对于频繁的事件,每天3-4次同步应该足够了。
使用像cron
这样的低精度调度程序,提前2-3分钟,启动一个简单的包装器shell脚本wait()
,直到例如活动前15秒。然后包装器脚本启动tagert应用程序,优先级高于正常值。
应用程序加载(磁盘访问和动态链接很慢),读取所需的任何数据文件,进行所有耗时的计算等。然后使用usleep()
以亚秒级精度等待直到开始时刻并ftime()
或gettimeofday()
放在fireLasersAtTheMoon()
之前,或恰好是你的目标行动。
显然,同步如此精确的行动是没有意义的,这些行动自然是不精确的,比如网络通信。如果您的网络具有可预测的延迟,您只需使用ping
的往返时间进行测量,并在一台主机上进行主进程,以通过ssh向其他主机发送启动命令,从而考虑到延迟。