mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 21:28:26 +00:00
feat(daemon): add legacy Clawdis service cleanup
This commit is contained in:
@@ -3,7 +3,10 @@ import fs from "node:fs/promises";
|
||||
import path from "node:path";
|
||||
import { promisify } from "node:util";
|
||||
|
||||
import { GATEWAY_WINDOWS_TASK_NAME } from "./constants.js";
|
||||
import {
|
||||
GATEWAY_WINDOWS_TASK_NAME,
|
||||
LEGACY_GATEWAY_WINDOWS_TASK_NAMES,
|
||||
} from "./constants.js";
|
||||
|
||||
const execFileAsync = promisify(execFile);
|
||||
|
||||
@@ -20,6 +23,13 @@ function resolveTaskScriptPath(
|
||||
return path.join(home, ".clawdbot", "gateway.cmd");
|
||||
}
|
||||
|
||||
function resolveLegacyTaskScriptPath(
|
||||
env: Record<string, string | undefined>,
|
||||
): string {
|
||||
const home = resolveHomeDir(env);
|
||||
return path.join(home, ".clawdis", "gateway.cmd");
|
||||
}
|
||||
|
||||
function quoteCmdArg(value: string): string {
|
||||
if (!/[ \t"]/g.test(value)) return value;
|
||||
return `"${value.replace(/"/g, '\\"')}"`;
|
||||
@@ -242,3 +252,79 @@ export async function isScheduledTaskInstalled(): Promise<boolean> {
|
||||
const res = await execSchtasks(["/Query", "/TN", GATEWAY_WINDOWS_TASK_NAME]);
|
||||
return res.code === 0;
|
||||
}
|
||||
export type LegacyScheduledTask = {
|
||||
name: string;
|
||||
scriptPath: string;
|
||||
installed: boolean;
|
||||
scriptExists: boolean;
|
||||
};
|
||||
|
||||
export async function findLegacyScheduledTasks(
|
||||
env: Record<string, string | undefined>,
|
||||
): Promise<LegacyScheduledTask[]> {
|
||||
const results: LegacyScheduledTask[] = [];
|
||||
let schtasksAvailable = true;
|
||||
try {
|
||||
await assertSchtasksAvailable();
|
||||
} catch {
|
||||
schtasksAvailable = false;
|
||||
}
|
||||
|
||||
for (const name of LEGACY_GATEWAY_WINDOWS_TASK_NAMES) {
|
||||
const scriptPath = resolveLegacyTaskScriptPath(env);
|
||||
let installed = false;
|
||||
if (schtasksAvailable) {
|
||||
const res = await execSchtasks(["/Query", "/TN", name]);
|
||||
installed = res.code === 0;
|
||||
}
|
||||
let scriptExists = false;
|
||||
try {
|
||||
await fs.access(scriptPath);
|
||||
scriptExists = true;
|
||||
} catch {
|
||||
// ignore
|
||||
}
|
||||
if (installed || scriptExists) {
|
||||
results.push({ name, scriptPath, installed, scriptExists });
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
export async function uninstallLegacyScheduledTasks({
|
||||
env,
|
||||
stdout,
|
||||
}: {
|
||||
env: Record<string, string | undefined>;
|
||||
stdout: NodeJS.WritableStream;
|
||||
}): Promise<LegacyScheduledTask[]> {
|
||||
const tasks = await findLegacyScheduledTasks(env);
|
||||
if (tasks.length === 0) return tasks;
|
||||
|
||||
let schtasksAvailable = true;
|
||||
try {
|
||||
await assertSchtasksAvailable();
|
||||
} catch {
|
||||
schtasksAvailable = false;
|
||||
}
|
||||
|
||||
for (const task of tasks) {
|
||||
if (schtasksAvailable && task.installed) {
|
||||
await execSchtasks(["/Delete", "/F", "/TN", task.name]);
|
||||
} else if (!schtasksAvailable && task.installed) {
|
||||
stdout.write(
|
||||
`schtasks unavailable; unable to remove legacy task: ${task.name}\n`,
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
await fs.unlink(task.scriptPath);
|
||||
stdout.write(`Removed legacy task script: ${task.scriptPath}\n`);
|
||||
} catch {
|
||||
stdout.write(`Legacy task script not found at ${task.scriptPath}\n`);
|
||||
}
|
||||
}
|
||||
|
||||
return tasks;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user