openclaw - 💡(How to fix) Fix Bonjour plugin crash-loops gateway on hosts without working multicast (2026.4.24) [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#72420Fetched 2026-04-27 05:30:20
View on GitHub
Comments
1
Participants
2
Timeline
2
Reactions
0
Author
Timeline (top)
closed ×1commented ×1

Root Cause

Root cause hypothesis

The watchdog's restart-advertiser action cancels an in-flight CIAO promise. That cancellation rejection isn't caught by the bonjour plugin, so it propagates as an unhandled rejection at the Node level, which exits the process.

Fix Action

Workaround

Disable the plugin:

openclaw config set plugins.entries.bonjour.enabled false
systemctl --user restart openclaw-gateway

This works for VPS hosts that don't need mDNS but is not a fix for users who do want local network discovery.

Code Example

[plugins] bonjour: watchdog detected non-announced service; attempting re-advertise
 (gateway fqdn=<host> (OpenClaw)._openclaw-gw._tcp.local. host=openclaw.local.
 port=18789 state=probing)
[plugins] bonjour: restarting advertiser (service stuck in probing for 28593ms ...)
[plugins] bonjour: advertised gateway ... state=unannounced
[openclaw] Unhandled promise rejection: CIAO PROBING CANCELLED
[openclaw] wrote stability bundle: /root/.openclaw/logs/stability/openclaw-stability-...-unhandled_rejection.json
systemd: openclaw-gateway.service: Main process exited, code=exited, status=1/FAILURE

---

openclaw config set plugins.entries.bonjour.enabled false
systemctl --user restart openclaw-gateway

---

{
  "version": 1,
  "generatedAt": "2026-04-26T20:40:16.906Z",
  "reason": "unhandled_rejection",
  "process": {
    "pid": 4181711,
    "platform": "linux",
    "arch": "x64",
    "node": "22.22.1",
    "uptimeMs": 99736
  },
  "host": {
    "hostname": "<redacted-hostname>"
  },
  "snapshot": {
    "generatedAt": "2026-04-26T20:40:16.906Z",
    "capacity": 1000,
    "count": 0,
    "dropped": 0,
    "events": [],
    "summary": {
      "byType": {}
    }
  }
}
RAW_BUFFERClick to expand / collapse

Environment

  • OpenClaw: 2026.4.24 (cbcfdf6), upgraded from 2026.4.5
  • Host: Ubuntu 24.04.4 LTS on a Hostinger VPS (no real LAN multicast)
  • Node: v22.22.1
  • Install method: npm global

Symptom

Gateway enters a restart loop with restart counter climbing every ~45 seconds. Stability bundle written for each crash; same unhandled_rejection reason in every bundle (17 bundles total before disabling the plugin).

Repro

  1. Install OpenClaw 2026.4.24 on a host where mDNS multicast doesn't propagate (any standard VPS).
  2. Start the gateway with the bonjour plugin enabled (default).
  3. Within ~30 seconds, observe the watchdog logs and crash.

Log fingerprint

[plugins] bonjour: watchdog detected non-announced service; attempting re-advertise
 (gateway fqdn=<host> (OpenClaw)._openclaw-gw._tcp.local. host=openclaw.local.
 port=18789 state=probing)
[plugins] bonjour: restarting advertiser (service stuck in probing for 28593ms ...)
[plugins] bonjour: advertised gateway ... state=unannounced
[openclaw] Unhandled promise rejection: CIAO PROBING CANCELLED
[openclaw] wrote stability bundle: /root/.openclaw/logs/stability/openclaw-stability-...-unhandled_rejection.json
systemd: openclaw-gateway.service: Main process exited, code=exited, status=1/FAILURE

The same pattern occurs with CIAO ANNOUNCEMENT CANCELLED when the service makes it to announcing state before the watchdog cancels.

Root cause hypothesis

The watchdog's restart-advertiser action cancels an in-flight CIAO promise. That cancellation rejection isn't caught by the bonjour plugin, so it propagates as an unhandled rejection at the Node level, which exits the process.

Workaround

Disable the plugin:

openclaw config set plugins.entries.bonjour.enabled false
systemctl --user restart openclaw-gateway

This works for VPS hosts that don't need mDNS but is not a fix for users who do want local network discovery.

Stability bundle (redacted)

{
  "version": 1,
  "generatedAt": "2026-04-26T20:40:16.906Z",
  "reason": "unhandled_rejection",
  "process": {
    "pid": 4181711,
    "platform": "linux",
    "arch": "x64",
    "node": "22.22.1",
    "uptimeMs": 99736
  },
  "host": {
    "hostname": "<redacted-hostname>"
  },
  "snapshot": {
    "generatedAt": "2026-04-26T20:40:16.906Z",
    "capacity": 1000,
    "count": 0,
    "dropped": 0,
    "events": [],
    "summary": {
      "byType": {}
    }
  }
}

Suggested fix

Either catch the rejection inside the watchdog's restart path, or skip the watchdog entirely on hosts where multicast is detected as non-functional after N probing attempts.

extent analysis

TL;DR

The most likely fix is to catch the rejection inside the watchdog's restart path or skip the watchdog on hosts where multicast is non-functional.

Guidance

  • Investigate the watchdog's restart-advertiser action to determine why it cancels the in-flight CIAO promise, causing an unhandled rejection.
  • Consider implementing a try-catch block around the restart-advertiser action to catch and handle the rejection.
  • Alternatively, explore skipping the watchdog entirely on hosts where multicast is detected as non-functional after a certain number of probing attempts.
  • Review the bonjour plugin code to ensure it properly handles promise rejections and cancellations.

Example

No code snippet is provided as the issue does not contain sufficient information to create a specific example.

Notes

The provided workaround of disabling the bonjour plugin may not be suitable for users who require local network discovery. A more robust solution is needed to handle the unhandled rejection and prevent the gateway restart loop.

Recommendation

Apply a workaround by catching the rejection inside the watchdog's restart path, as this approach is more targeted and less likely to introduce new issues. This will require modifications to the bonjour plugin code to properly handle promise rejections and cancellations.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix Bonjour plugin crash-loops gateway on hosts without working multicast (2026.4.24) [1 comments, 2 participants]