Skip to content

fix(gateway): avoid systemd restart loops on replace - #32989

Closed
LeonSGP43 wants to merge 1 commit into
NousResearch:mainfrom
LeonSGP43:fix/32951-systemd-restart-policy
Closed

fix(gateway): avoid systemd restart loops on replace#32989
LeonSGP43 wants to merge 1 commit into
NousResearch:mainfrom
LeonSGP43:fix/32951-systemd-restart-policy

Conversation

@LeonSGP43

Copy link
Copy Markdown
Contributor

Closes #32951

Summary

  • change generated gateway systemd units from Restart=always to Restart=on-failure while keeping RestartForceExitStatus=75
  • preserve graceful SIGUSR1-driven restarts for supervised services without reviving clean --replace takeovers
  • lock the new restart policy into the existing user/system unit tests

Local proof

  • pytest -q -o addopts= tests/hermes_cli/test_gateway_service.py -k "user_unit_avoids_recursive_execstop_and_uses_extended_stop_timeout or system_unit_avoids_recursive_execstop_and_uses_extended_stop_timeout"
  • ruff check hermes_cli/gateway.py tests/hermes_cli/test_gateway_service.py
  • git diff --check

@alt-glitch alt-glitch added type/bug Something isn't working comp/gateway Gateway runner, session dispatch, delivery comp/cli CLI entry point, hermes_cli/, setup wizard P2 Medium — degraded but workaround exists labels May 27, 2026
@teknium1

Copy link
Copy Markdown
Contributor

Thanks for the focused restart-policy fix. The specific supervised --replace loop is already eliminated on current main; this is an automated hermes-sweeper review.

  • Commit 4d18717b6c798d4f6bab9e736c6ed10c5a8365f4 removed --replace from both generated systemd ExecStart templates specifically to prevent supervisor self-kill/restart loops.
  • Current templates use plain gateway run at hermes_cli/gateway.py:2753 and hermes_cli/gateway.py:2790.
  • Regression coverage at tests/hermes_cli/test_gateway_service.py:2554 asserts generated systemd units omit --replace and documents the same lifecycle rationale.

This matches the alternative accepted in #32951: make systemd-managed gateway startup safe by removing managed-service --replace takeovers.

@teknium1 teknium1 closed this Jul 13, 2026
@teknium1 teknium1 added sweeper:implemented-on-main Sweeper: behavior already present on current main sweeper:risk-message-delivery Sweeper risk: may drop, duplicate, misroute, or suppress messages sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform labels Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cli CLI entry point, hermes_cli/, setup wizard comp/gateway Gateway runner, session dispatch, delivery P2 Medium — degraded but workaround exists sweeper:blast-moderate Sweeper blast radius: moderate — a subsystem or single platform sweeper:implemented-on-main Sweeper: behavior already present on current main sweeper:risk-compatibility Sweeper risk: may break existing users, config, migrations, defaults, or upgrades sweeper:risk-message-delivery Sweeper risk: may drop, duplicate, misroute, or suppress messages type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Avoid systemd gateway restart/takeover loops from Restart=always + --replace

3 participants