diff --git a/hermes_cli/gateway.py b/hermes_cli/gateway.py index 138eeb25..1c44e311 100644 --- a/hermes_cli/gateway.py +++ b/hermes_cli/gateway.py @@ -6,6 +6,7 @@ Handles: hermes gateway [run|start|stop|restart|status|install|uninstall|setup] import asyncio import os +import shutil import signal import subprocess import sys @@ -401,8 +402,14 @@ def generate_systemd_unit(system: bool = False, run_as_user: str | None = None) venv_bin = str(PROJECT_ROOT / "venv" / "bin") node_bin = str(PROJECT_ROOT / "node_modules" / ".bin") - # Build a PATH that includes the venv, node_modules, and standard system dirs - sane_path = f"{venv_bin}:{node_bin}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + path_entries = [venv_bin, node_bin] + resolved_node = shutil.which("node") + if resolved_node: + resolved_node_dir = str(Path(resolved_node).resolve().parent) + if resolved_node_dir not in path_entries: + path_entries.append(resolved_node_dir) + path_entries.extend(["/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin", "/sbin", "/bin"]) + sane_path = ":".join(path_entries) hermes_home = str(Path(os.getenv("HERMES_HOME", Path.home() / ".hermes")).resolve()) diff --git a/tests/hermes_cli/test_gateway_service.py b/tests/hermes_cli/test_gateway_service.py index 67277cbe..adc54615 100644 --- a/tests/hermes_cli/test_gateway_service.py +++ b/tests/hermes_cli/test_gateway_service.py @@ -85,6 +85,13 @@ class TestGeneratedSystemdUnits: assert "ExecStop=" not in unit assert "TimeoutStopSec=60" in unit + def test_user_unit_includes_resolved_node_directory_in_path(self, monkeypatch): + monkeypatch.setattr(gateway_cli.shutil, "which", lambda cmd: "/home/test/.nvm/versions/node/v24.14.0/bin/node" if cmd == "node" else None) + + unit = gateway_cli.generate_systemd_unit(system=False) + + assert "/home/test/.nvm/versions/node/v24.14.0/bin" in unit + def test_system_unit_avoids_recursive_execstop_and_uses_extended_stop_timeout(self): unit = gateway_cli.generate_systemd_unit(system=True)