// scripts/monitor-worker.ts const path = require('path') const dbPath = process.env.DATABASE_PATH || path.join(process.cwd(), 'data', 'issue.db') process.env.DATABASE_PATH = dbPath const { getDb } = require('../src/lib/db') const { initDatabase } = require('../src/lib/db-schema') const { BackgroundWorker } = require('../src/lib/monitor/worker') const { setSetting, getSetting } = require('../src/lib/monitor/settings-manager') initDatabase() const db = getDb() // 生成加密密钥(首次启动) if (!getSetting('monitor.encryption_key')) { const crypto = require('crypto') const newKey = crypto.randomBytes(32).toString('hex') setSetting('monitor.encryption_key', newKey, 'security') console.log('[Worker] 已生成加密密钥') } const worker = new BackgroundWorker() if (getSetting('monitor.enabled') === 'true') { worker.start() console.log('[Worker] 邮件监控已启动') } else { console.log('[Worker] 邮件监控未启用,等待 API 启用') } // 保持进程存活,定期检查监控状态是否变更 const CHECK_INTERVAL = 30_000 // 30秒 setInterval(() => { if (getSetting('monitor.enabled') === 'true' && !worker.cronJob) { worker.start() console.log('[Worker] 检测到监控已启用,自动启动') } else if (getSetting('monitor.enabled') !== 'true' && worker.cronJob) { worker.stop() console.log('[Worker] 检测到监控已禁用,自动停止') } }, CHECK_INTERVAL) process.on('SIGTERM', () => { console.log('[Worker] 收到 SIGTERM,正在停止...') worker.stop() process.exit(0) })