diff --git a/src/agent-manager.ts b/src/agent-manager.ts index 1c724c3..e39bc17 100644 --- a/src/agent-manager.ts +++ b/src/agent-manager.ts @@ -300,7 +300,7 @@ export async function stopAgent(name: string) { try { execFileSync( "ssh", - [...SSH_OPTS, `root@${info.ip}`, "killall python3 2>/dev/null; sleep 1"], + [...SSH_OPTS, `root@${info.ip}`, "pkill -f 'agent.py' 2>/dev/null; sleep 1"], { stdio: "pipe", timeout: 5_000 } ); } catch { @@ -358,18 +358,10 @@ export function listAgents(): AgentInfo[] { } catch { // Process is dead, clean up log(`Agent "${name}" is dead, cleaning up...`); - try { - deleteTap(info.tapDevice); - } catch {} - try { - releaseIp(info.octet); - } catch {} - try { - unlinkSync(info.rootfsPath); - } catch {} - try { - unlinkSync(info.socketPath); - } catch {} + try { deleteTap(info.tapDevice); } catch (e) { log(` tap cleanup: ${e}`); } + try { releaseIp(info.octet); } catch (e) { log(` ip cleanup: ${e}`); } + try { unlinkSync(info.rootfsPath); } catch (e) { log(` rootfs cleanup: ${e}`); } + try { unlinkSync(info.socketPath); } catch (e) { log(` socket cleanup: ${e}`); } delete agents[name]; } } @@ -430,7 +422,7 @@ export async function reloadAgent( // Signal agent to reload execFileSync( "ssh", - [...SSH_OPTS, sshTarget, "killall -HUP python3"], + [...SSH_OPTS, sshTarget, "pkill -HUP -f 'agent.py'"], { stdio: "pipe", timeout: 10_000 } ); } catch (err) { @@ -460,11 +452,10 @@ export function reconcileAgents(): { adopted: string[]; cleaned: string[] } { log(`Adopted running agent "${name}" (PID ${info.pid}, ${info.ip})`); } else { log(`Cleaning dead agent "${name}" (PID ${info.pid} gone)...`); - // Clean up resources from dead agent - try { deleteTap(info.tapDevice); } catch {} - try { releaseIp(info.octet); } catch {} - try { unlinkSync(info.rootfsPath); } catch {} - try { unlinkSync(info.socketPath); } catch {} + try { deleteTap(info.tapDevice); } catch (e) { log(` tap: ${e}`); } + try { releaseIp(info.octet); } catch (e) { log(` ip: ${e}`); } + try { unlinkSync(info.rootfsPath); } catch (e) { log(` rootfs: ${e}`); } + try { unlinkSync(info.socketPath); } catch (e) { log(` socket: ${e}`); } delete agents[name]; cleaned.push(name); }