带有同步的shell脚本

问题描述:

我必须编写一个脚本,在其中“同时”在我的机器和远程计算机上执行tcpdump。这是捕获的开始(第0秒)应该是同步的,以便我可以比较我分析中的两个tcpdump。带有同步的shell脚本

有没有办法实现这个目标?

如果您只需要大致的时间(例如,在200ms的范围内具有误差范围),那么只要确保两台机器具有相同的时间(例如通过NTP)然后使用例如cron同时运行这两个命令。

如果您希望更频繁地使用at command而不是cron。你可以做一些简单的日期算术,例如看到这一点:

或休眠状态,直到指定的时间:

在这两个脚本

(即本地和远程),然后运行本地命令并使用ssh在远程计算机上运行该命令。

如果您可以使用例如Python,你可以使用datetime模块,例如看到这一点:

的想法是相当多这样的:

  • 以当前时间
  • 计算目标时间 - 添加一些垫子秒(例如10秒)
  • 用这段时间作为参数运行这两个脚本(本地一个,远程一个与ssh
  • 睡到那个时候在这两个脚本 - 如果你不能ssh在10秒甚至更糟糕的,如果它需要超过10秒来运行本地脚本,你必须在这两个更严重的问题比这一个:)
  • 运行tcpdump脚本 - 他们应该非常同步(有一定的宽容,但我不认为它会超过任何最近的系统50ms)

希望这有助于。

+0

200 MS的可能性尽可能接近你可以得到的。如果可能的话,也可以在tcpdump中使用包含MS级别时间戳的格式(我不使用tcmpdump,也许它默认是在那里)。祝你好运。 – shellter 2012-02-14 00:53:21

这里的东西我写了刚才多个测试客户端同步:

#!/usr/bin/python 
import time 
import sys 

now = time.time() 
mod = float(sys.argv[1]) 
until = now - now % mod + mod 
print "sleeping until", until 

while True: 
    delta = until - time.time() 
    if delta <= 0: 
     print "done sleeping ", time.time() 
     break 
    time.sleep(delta/2) 

这个脚本休眠,直到下一个“四舍五入”或“尖”的时间。

一个简单的用例是在一个终端运行./sleep.py 10; ./test_client1.py,在另一个终端运行./sleep.py 10; ./test_client2.py

你想确保你的机器上的时钟是同步的。

或者,使用tcpdump中的这些选项之一,使用可为您提供完整时间戳的内容。

​​

最后你可以运行类似execnet在(几乎)同时启动多台计算机上的命令。