4

時折、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

関連する可能性のあるこの古いバグレポートを見ました。殺すことavahi-daemonで問題が一時的に解決するように見えることがあります。また、動かなくなったマシンを再起動する試みが 1 回成功しました。ただし、なぜこれが起こっているのか、そして可能な限り最も堅牢な方法で問題に対処する方法を理解したいと思います. 何か案は?

4

2 に答える 2

1

同様の問題があり、問題に対処するパッチを書きました。

フォローアップで、パッチをバグ 201 に関連付けました。

アップデート:

いくつかのデバイスで avahi デーモンのパッチを適用したバージョンを 1 年以上実行しています。多くの場合、デバイスは再起動され、ネットワークから切断/再接続されます。パッチを適用した後、デバイスの登録が停止することはなく、奇妙な副作用も発生しませんでした。

于 2015-09-10T09:00:20.723 に答える
0

チケット 201 がしばらく前から Avahi サイトに出回っていることに気付きました。登録すらできなかったのに… このプロジェクトの開発が滞っているようです。同様の問題が発生しました。以下はそれに対処しました(私たちにとって):

    diff --git a/avahi-core/server.cb/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) {
     static void register_stuff(AvahiServer *s) {
         アサートします。

    - server_set_state(s, AVAHI_SERVER_REGISTERING);
         s->n_host_rr_pending ++; /** AVAHI_SERVER_RUNNING の状態が早すぎて変更されていないことを確認してください */
    + server_set_state(s, AVAHI_SERVER_REGISTERING);

         register_hinfo;
         register_browse_domain(s);

于 2015-06-10T13:31:52.710 に答える