From a694f246fb7a118e43f7b2f392cbb9b7125b298f Mon Sep 17 00:00:00 2001 From: George Lambert Date: Fri, 11 Sep 2026 13:37:08 -0400 Subject: [PATCH] Detach SSH-spawned workers so remote start returns instead of hanging Remote node is launched in a bash -c background subshell. Live check on NS1: spawn, /health, kill as marchon with ~/.ssh/id_ed25519. --- packages/verae-fleet/src/ssh.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/verae-fleet/src/ssh.js b/packages/verae-fleet/src/ssh.js index 97adee6..e8a86c7 100644 --- a/packages/verae-fleet/src/ssh.js +++ b/packages/verae-fleet/src/ssh.js @@ -30,6 +30,7 @@ export function sshTarget(machine) { export function sshBaseArgs(machine) { const ident = expandHome(machine.identityFile || ''); const args = [ + '-n', '-o', 'BatchMode=yes', '-o', 'StrictHostKeyChecking=accept-new', '-o', 'IdentitiesOnly=yes', @@ -126,7 +127,8 @@ export async function sshSpawnWorker(machine, { instance, env }) { .filter(([k]) => k.startsWith('FLEET_')) .map(([k, v]) => `${k}=${shellQuote(v)}`) .join(' '); - const cmd = `mkdir -p ${remoteDir}/data/${instance} && cd ${remoteDir} && ${fleetEnv} nohup node src/worker.js >data/${instance}/worker.log 2>&1 & echo $!`; + const inner = `node src/worker.js data/${instance}/worker.log 2>&1 & echo $!`; + const cmd = `mkdir -p ${remoteDir}/data/${instance} && cd ${remoteDir} && ${fleetEnv} bash -c ${shellQuote(inner)}`; const { stdout } = await sshExec(machine, cmd); const pid = Number(String(stdout).split('\n').pop()); if (!Number.isFinite(pid)) throw new Error(`remote spawn produced no pid: ${stdout}`);