← back to Ticket System
use owner-safe PM2 CLI wrapper
5ef46940f648002c06169ebee162cb7b4ae85292 · 2026-08-30 20:54:49 -0700 · Steve Abrams
Files touched
Diff
commit 5ef46940f648002c06169ebee162cb7b4ae85292
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sun Aug 30 20:54:49 2026 -0700
use owner-safe PM2 CLI wrapper
---
server.js | 29 ++---------------------------
1 file changed, 2 insertions(+), 27 deletions(-)
diff --git a/server.js b/server.js
index f00b4ff3..4a56b6dd 100644
--- a/server.js
+++ b/server.js
@@ -35,25 +35,7 @@ function pm2DaemonReachable() {
} catch (_) { return false; }
}
let runCache = { ts: 0, data: { pm2: [], sessions: 0, at: null } };
-const PM2_CLI_LOCK_TS = path.join(PM2_HOME_TS, 'cli.lock.d');
-async function acquirePm2CliLock() {
- const deadline = Date.now() + 10000;
- const staleMs = 8000;
- while (Date.now() < deadline) {
- try {
- await fs.promises.mkdir(PM2_CLI_LOCK_TS);
- return async () => { try { await fs.promises.rmdir(PM2_CLI_LOCK_TS); } catch {} };
- } catch (e) {
- if (e.code !== 'EEXIST') return null;
- try {
- const st = await fs.promises.stat(PM2_CLI_LOCK_TS);
- if (Date.now() - st.mtimeMs > staleMs) { await fs.promises.rmdir(PM2_CLI_LOCK_TS); continue; }
- } catch {}
- await new Promise(resolve => setTimeout(resolve, 80));
- }
- }
- return null;
-}
+const PM2_SERIALIZED_TS = path.join(os.homedir(), '.claude', 'skills', 'keep-alive', 'proposals', 'TK-10970', 'pm2-serialized.js');
function getRunning(cb) {
if (Date.now() - runCache.ts < 5000) return cb(runCache.data);
if (!pm2DaemonReachable()) {
@@ -61,13 +43,7 @@ function getRunning(cb) {
runCache = { ts: Date.now(), data: { pm2: runCache.data.pm2 || [], sessions: runCache.data.sessions || 0, at: new Date().toISOString() } };
return cb(runCache.data);
}
- acquirePm2CliLock().then((release) => {
- if (!release) {
- runCache = { ts: Date.now(), data: { pm2: runCache.data.pm2 || [], sessions: runCache.data.sessions || 0, at: new Date().toISOString() } };
- return cb(runCache.data);
- }
- exec('pm2 jlist', { maxBuffer: 16 * 1024 * 1024, timeout: 7000, killSignal: 'SIGKILL' }, async (e, out) => {
- await release();
+ execFile(process.execPath, [PM2_SERIALIZED_TS, 'jlist'], { maxBuffer: 16 * 1024 * 1024, timeout: 22000, killSignal: 'SIGKILL' }, (e, out) => {
let pm2 = [];
if (!e) { try {
pm2 = JSON.parse(out).filter(p => p.pm2_env && p.pm2_env.status === 'online')
@@ -82,7 +58,6 @@ function getRunning(cb) {
runCache = { ts: Date.now(), data: { pm2, sessions, at: new Date().toISOString() } };
cb(runCache.data);
});
- });
});
}
← b7a70b2b serialize ticket-board PM2 fleet reads
·
back to Ticket System
·
Sync YOLO cycles into the ticket ledger 7ebd636e →