我正在为我们的一组实验室计算机编写局域网唤醒脚本。我们有 sqlite 数据库,其中包含计算机主机名、IP 和 MAC 的列表,目前我使用“-c1”对每个数据库进行 ping 操作,因此它不会无休止地运行 - 但即使这需要一些等待,是否有更快的方法来获取应答而不是 ping?使用 ping 似乎会大大减慢脚本速度,因为它需要 ping 答案才能继续。
非常感谢您的任何建议!
答案1
发送单个数据包并等待响应将是最快的方法之一,而 ping 是一种很好的方法。事实上,根据您的用例,我认为它是太快,因为它并没有真正告诉您系统是否实际上在做任何有用的事情,只是内核的网络子系统处于活动状态并已配置。
但假设这足够好,您可以进行一些改进。首先,您可以-W1
将 ping 超时减少到一秒。其次,您可以使脚本异步(在后台线程中)对不同主机执行 ping 操作,并根据需要检查结果而不是等待。
或者,您可以重新考虑该方法,并让远程系统在启动时以某种方式签入,如果系统尚未签入,您可以假设它已关闭。
答案2
这就是 fping 的设计目的。http://fping.sourceforge.net/
之后您需要解析输出,而不是依赖返回码,但它比普通 ping 快得多。
答案3
这仅适用于一台或两台计算机,但如果您将它们直接连接到负责检查其状态的计算机,则可以用来ethtool
查看链接是否处于活动状态。
答案4
神经节使用多播流量来监视集群中的许多主机,也许您可以使用类似的东西?这假设您的网络硬件允许所有主机和监控系统之间的多播流量。