avahi-daemon 无法注册我正在使用 avahi-publish-service 发布的服务
Posted
技术标签:
【中文标题】avahi-daemon 无法注册我正在使用 avahi-publish-service 发布的服务【英文标题】:avahi-daemon gets stuck registering a service I'm publishing with avahi-publish-service 【发布时间】:2014-10-15 20:15:14 【问题描述】:有时,我注意到我无法检测到我在 Ubuntu 上通过 avahi (bonjour) 发布的服务。例如,avahi-browse -a 不显示已发布的服务,浏览器也不解析已发布的 .local 主机名。在服务器端,我注意到ps
的输出表明avahi-daemon
在注册服务时遇到问题:
ubuntu@node3:~$ ps aux | grep [a]vahi
root 26584 0.0 0.0 4204 356 ? S 19:21 0:00 supervise avahi
ubuntu 26598 0.0 0.0 4216 352 ? S 19:21 0:00 multilog s8388608 n10 /var/log/avahi
avahi 28332 0.0 0.0 32352 1636 ? S 20:19 0:00 avahi-daemon: registering [node3-44.local]
avahi 28333 0.0 0.0 32224 468 ? S 20:19 0:00 avahi-daemon: chroot helper
root 28338 0.0 0.0 17192 1028 ? S 20:19 0:00 avahi-publish-service -as node3 _foobar._tcp 8080
这是该命令在“未卡住”主机上的输出:
ubuntu@node2:~$ ps aux | grep [a]vahi
root 26501 0.0 0.0 4204 356 ? S 19:21 0:00 supervise avahi
ubuntu 26527 0.0 0.0 4216 352 ? S 19:21 0:00 multilog s8388608 n10 /var/log/avahi
avahi 29418 0.0 0.0 32484 1632 ? S 20:12 0:00 avahi-daemon: running [node2.local]
avahi 29419 0.0 0.0 32224 464 ? S 20:12 0:00 avahi-daemon: chroot helper
root 29425 0.0 0.0 17192 1032 ? S 20:12 0:00 avahi-publish-service -as node2 _foobar._tcp 8080
我确实看到了这个旧的bug report,这可能是相关的。有时杀死avahi-daemon
似乎可以暂时解决问题。此外,重新启动卡住的机器的一次尝试也奏效了。但是,我想了解为什么会发生这种情况以及如何以最可靠的方式处理该问题。有什么想法吗?
【问题讨论】:
我之前也遇到过同样的问题,直到在 avahi-daemon.conf 中添加了allow-interfaces=
。
【参考方案1】:
我遇到了类似的问题并写了一封patch 为我解决了这个问题。
在follow up 中,我将补丁与错误 201 相关联。
更新:
一年多以来,我一直在多台设备上运行 avahi 守护程序的补丁版本。设备通常会重新启动、断开/重新连接到网络。这些设备在应用补丁后从未卡住注册,我们也没有遇到任何奇怪的副作用。
【讨论】:
【参考方案2】:我注意到 201 票在 Avahi 网站上已经存在了一段时间。虽然我什至不能在那里注册......看起来这个项目的发展已经下降。我们遇到了类似的问题。下面解决了它(对我们来说):
差异 --git a/avahi-core/server.c b/avahi-core/server.c 索引 69a1d02..03d4fc1 100644 --- a/avahi-core/server.c +++ b/avahi-core/server.c @@ -1216,8 +1216,8 @@ static void register_browse_domain(AvahiServer *s) 静态无效寄存器_stuff(AvahiServer *s) 断言; - server_set_state(s, AVAHI_SERVER_REGISTERING); s->n_host_rr_pending ++; /** 确保状态没有过早改变 tp AVAHI_SERVER_RUNNING */ + server_set_state(s, AVAHI_SERVER_REGISTERING); register_hinfo(s); 注册浏览域;【讨论】:
你能告诉我你测试的范围有多广吗?将有助于集成补丁。 github.com/lathiat/avahi/issues/7以上是关于avahi-daemon 无法注册我正在使用 avahi-publish-service 发布的服务的主要内容,如果未能解决你的问题,请参考以下文章