Rename to hkt.sh
This commit is contained in:
95
aff-monitor/scripts/run-task.js
Normal file
95
aff-monitor/scripts/run-task.js
Normal file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* CLI: 手动执行监控任务
|
||||
*
|
||||
* 用法:
|
||||
* node scripts/run-task.js <task_id> — 执行指定任务
|
||||
* node scripts/run-task.js --all — 执行所有启用的任务
|
||||
* node scripts/run-task.js --test-push [chat] — 测试 Telegram 推送
|
||||
*/
|
||||
require('dotenv').config({ path: require('path').join(__dirname, '..', '.env') });
|
||||
|
||||
const db = require('../src/db');
|
||||
const { runTask } = require('../src/utils/taskRunner');
|
||||
const { sendTestMessage } = require('../src/utils/telegram');
|
||||
|
||||
async function main() {
|
||||
const args = process.argv.slice(2);
|
||||
|
||||
if (args.length === 0) {
|
||||
console.log(`
|
||||
用法:
|
||||
node scripts/run-task.js <task_id> 执行指定任务
|
||||
node scripts/run-task.js --all 执行所有启用的任务
|
||||
node scripts/run-task.js --test-push [chat] 测试 TG 推送
|
||||
node scripts/run-task.js --list 列出所有任务
|
||||
|
||||
环境变量:
|
||||
TG_BOT_TOKEN Telegram Bot Token
|
||||
TG_DEFAULT_CHANNEL_ID 默认推送频道
|
||||
`);
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
if (args[0] === '--test-push') {
|
||||
const chatId = args[1] || undefined;
|
||||
console.log('🧪 发送测试推送...');
|
||||
const result = await sendTestMessage(chatId);
|
||||
console.log(result.ok ? '✅ 推送成功' : `❌ 推送失败: ${result.description}`);
|
||||
process.exit(result.ok ? 0 : 1);
|
||||
}
|
||||
|
||||
if (args[0] === '--list') {
|
||||
const tasks = db.prepare(`
|
||||
SELECT t.id, t.enabled, t.cron_expr, t.last_run, p.name AS product_name, m.name AS merchant_name
|
||||
FROM monitor_tasks t
|
||||
LEFT JOIN products p ON t.product_id = p.id
|
||||
LEFT JOIN merchants m ON p.merchant_id = m.id
|
||||
ORDER BY t.id
|
||||
`).all();
|
||||
if (tasks.length === 0) {
|
||||
console.log('暂无任务');
|
||||
} else {
|
||||
console.log('ID | 状态 | 产品 | 上次运行');
|
||||
console.log('-'.repeat(70));
|
||||
for (const t of tasks) {
|
||||
const status = t.enabled ? '✅' : '⏸ ';
|
||||
console.log(`${String(t.id).padEnd(4)}| ${status} | ${(t.merchant_name + ' — ' + t.product_name).padEnd(30)}| ${t.last_run || '-'}`);
|
||||
}
|
||||
}
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
if (args[0] === '--all') {
|
||||
const tasks = db.prepare('SELECT id FROM monitor_tasks WHERE enabled = 1').all();
|
||||
if (tasks.length === 0) {
|
||||
console.log('没有启用的任务');
|
||||
process.exit(0);
|
||||
}
|
||||
console.log(`🔄 执行 ${tasks.length} 个任务...\n`);
|
||||
for (const task of tasks) {
|
||||
console.log(`── 任务 #${task.id} ──`);
|
||||
const result = await runTask(task.id);
|
||||
console.log(` ${result.message}\n`);
|
||||
}
|
||||
console.log('✅ 全部完成');
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
// 指定 task_id
|
||||
const taskId = parseInt(args[0], 10);
|
||||
if (isNaN(taskId)) {
|
||||
console.error('❌ 无效的 task_id:', args[0]);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log(`🔄 执行任务 #${taskId}...`);
|
||||
const result = await runTask(taskId);
|
||||
console.log(result.message);
|
||||
process.exit(result.success ? 0 : 1);
|
||||
}
|
||||
|
||||
main().catch(err => {
|
||||
console.error('❌ 致命错误:', err);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user