#!/usr/bin/env node /* eslint-disable no-console,@typescript-eslint/no-var-requires */ const http = require("http"); const path = require("path"); // 调用 generate-manifest.js 生成 manifest.json function generateManifest() { console.log("Generating manifest.json for Docker deployment..."); try { const generateManifestScript = path.join( __dirname, "scripts", "generate-manifest.js" ); require(generateManifestScript); } catch (error) { console.error("❌ Error calling generate-manifest.js:", error); throw error; } } generateManifest(); // 直接在当前进程中启动 standalone Server(`server.js`) require("./server.js"); // 每 1 秒轮询一次,直到请求成功 const TARGET_URL = `http://${process.env.HOSTNAME || "localhost"}:${ process.env.PORT || 3000 }/login`; const intervalId = setInterval(() => { console.log(`Fetching ${TARGET_URL} ...`); const req = http.get(TARGET_URL, (res) => { // 当返回 2xx 状态码时认为成功,然后停止轮询 if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { console.log("Server is up, stop polling."); clearInterval(intervalId); // 服务器启动后,立即执行一次 cron 任务 executeCronJob(); // 然后设置每小时执行一次 cron 任务 setInterval(() => { executeCronJob(); }, 60 * 60 * 1000); // 每小时执行一次 } }); req.setTimeout(2000, () => { req.destroy(); }); }, 1000); // 执行 cron 任务的函数 function executeCronJob() { const cronUrl = `http://${process.env.HOSTNAME || "localhost"}:${ process.env.PORT || 3000 }/api/cron`; console.log(`Executing cron job: ${cronUrl}`); const req = http.get(cronUrl, (res) => { let data = ""; res.on("data", (chunk) => { data += chunk; }); res.on("end", () => { if (res.statusCode && res.statusCode >= 200 && res.statusCode < 300) { console.log("Cron job executed successfully:", data); } else { console.error("Cron job failed:", res.statusCode, data); } }); }); req.on("error", (err) => { console.error("Error executing cron job:", err); }); req.setTimeout(30000, () => { console.error("Cron job timeout"); req.destroy(); }); }