fix(agent): escape systemd cgroup when spawning self-destruct reaper
The reaper was being SIGTERM'd mid-rm because `start_new_session=True` only forks a new POSIX session — it does not escape decnet-agent.service's cgroup. When the reaper ran `systemctl stop decnet-agent`, systemd tore down the whole cgroup (reaper included) before `rm -rf /opt/decnet*` finished, leaving the install on disk. Spawn the reaper via `systemd-run --collect --unit decnet-reaper-<pid>` so it runs in a fresh transient scope, outside the agent unit. Falls back to bare Popen for non-systemd hosts.
This commit is contained in:
@@ -71,8 +71,12 @@ def test_self_destruct_spawns_reaper_and_returns_fast(monkeypatch, tmp_path) ->
|
||||
assert resp.json()["status"] == "self_destruct_scheduled"
|
||||
assert len(spawned) == 1
|
||||
assert spawned[0]["kw"].get("start_new_session") is True
|
||||
script_path = spawned[0]["args"][1]
|
||||
assert script_path.startswith("/tmp/decnet-reaper-")
|
||||
script_candidates = [
|
||||
a for a in spawned[0]["args"]
|
||||
if isinstance(a, str) and a.startswith("/tmp/decnet-reaper-")
|
||||
]
|
||||
assert len(script_candidates) == 1, spawned[0]["args"]
|
||||
script_path = script_candidates[0]
|
||||
# Reaper content sanity check — covers the paths the operator asked for.
|
||||
import pathlib
|
||||
body = pathlib.Path(script_path).read_text()
|
||||
|
||||
Reference in New Issue
Block a user