diff --git a/app/server/config/integration/proc.ts b/app/server/config/integration/proc.ts index 44c1b87..d6ca9b8 100644 --- a/app/server/config/integration/proc.ts +++ b/app/server/config/integration/proc.ts @@ -61,14 +61,37 @@ export default class ProcIntegration extends Integration { log.debug('config', 'Found Headscale processes: %o', pids); if (pids.length > 1) { - log.error( + log.warn( 'config', 'Found %d Headscale processes: %s', pids.length, pids.join(', '), ); - return false; - } + + log.debug('config', 'Checking if any of them have Parent PID = 1, assuming thats the correct PID'); + const ppidRegex = /(?:PPid:\s)(\d+)(?:\n?)/; + for (const pid of pids) { + const pidStatusPath = join('/proc', pid.toString(), 'status'); + try { + log.debug('config', 'Reading %s', pidStatusPath); + const pidData = await readFile(pidStatusPath, 'utf8'); + const ppidResult = pidData.match(ppidRegex); + + if (ppidResult !== null) { + const potentialPPid = Number.parseInt(ppidResult[1], 10); + if (potentialPPid === 1) { + this.pid = pid; + log.info('config', 'Found potential Headscale process with PID: %d based on Parent PID = 1', this.pid); + return true; + } + } + } catch (error) { + log.error('config', 'Failed to read %s: %s', pidStatusPath, error); + } + } + + return false; + } if (pids.length === 0) { log.error('config', 'Could not find Headscale process'); diff --git a/flake.lock b/flake.lock index aa25582..7e929b4 100644 --- a/flake.lock +++ b/flake.lock @@ -40,11 +40,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1749871736, - "narHash": "sha256-K9yBph93OLTNw02Q6e9CYFGrUhvEXnh45vrZqIRWfvQ=", + "lastModified": 1750386251, + "narHash": "sha256-1ovgdmuDYVo5OUC5NzdF+V4zx2uT8RtsgZahxidBTyw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "6afe187897bef7933475e6af374c893f4c84a293", + "rev": "076e8c6678d8c54204abcb4b1b14c366835a58bb", "type": "github" }, "original": {