You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

node-cron仅初始执行app.js,定时间隔不执行脚本问题排查

问题分析与修复方案

你遇到的问题主要来自两个关键错误:

1. Node.js模块缓存导致app.js仅执行一次

当你在cron回调里使用require('./app.js')时,Node.js会在第一次加载模块后自动缓存它。后续的require调用不会重新执行app.js里的顶层代码,只会返回之前缓存的模块对象。这就是为什么第一次触发定时任务时app.js正常执行(出现了retweet相关日志),但之后只有console.log输出的核心原因。

2. 定义了commandList但未实际执行命令

你代码里的commandList = [ "node app.js" ]只是定义了一个数组,但完全没有调用任何方法来执行这个命令,所以这行代码根本起不到运行app.js的作用。


修复后的代码示例

要真正让每次定时任务触发时都执行app.js,你需要用Node.js的child_process模块来启动新进程执行脚本,而不是依赖require。这里推荐使用child_process.exec:

const cron = require('node-cron');
const { exec } = require('child_process');

cron.schedule('*/10 * * * * *', function(){
  // 执行node app.js命令
  exec('node app.js', (error, stdout, stderr) => {
    if (error) {
      console.error(`执行出错: ${error.message}`);
      return;
    }
    if (stderr) {
      console.error(`错误输出: ${stderr}`);
      return;
    }
    console.log('Bot successfully executed');
    console.log(`脚本输出: ${stdout}`);
  });
});

额外说明

  • 如果你需要更精细化的进程控制(比如实时输出日志),可以使用child_process.spawn代替exec。
  • 确保app.js的路径正确,如果和当前脚本不在同一目录,要使用绝对路径或者相对正确的路径。

内容的提问来源于stack exchange,提问作者CodeSpent

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:49:29