NestJS Cron执行异常:每5秒重复打印3次问题排查
Cron定时任务每5秒重复打印3次的问题排查
你的代码如下:
@Cron('*/5 * * * * *') testCron() { console.log('cron'); }
预期每5秒打印一次"cron",但实际每5秒出现3次输出,大概率是以下几种原因:
- 模块重复实例化:如果包含这个定时任务的模块被多个父模块导入,或者在根模块里重复导入,会导致同一个任务被创建3个实例,每个实例都会触发定时任务。
- 多进程运行:如果用PM2、Docker或者其他方式启动了3个应用进程,每个进程都会独立执行定时任务,自然会重复打印。
- Cron调度器重复注册:在NestJS中如果多次调用
CronModule.forRoot(),或者手动重复注册了SchedulerRegistry,会生成多个调度器,每个都触发任务。
对应的解决方法:
- 检查模块导入:确保包含该任务的模块只在一个模块(一般是AppModule)中导入,删除其他地方的重复导入。
- 排查进程数量:用系统工具查看当前运行的应用进程数,关闭多余的进程;如果确实需要多进程部署,要加分布式锁(比如Redis锁),让只有一个进程执行定时任务。
- 核对Cron配置:确认
CronModule.forRoot()只在根模块初始化一次,没有重复注册调度相关的服务。
内容的提问来源于stack exchange,提问作者ffsdfdfadf
相关产品推荐
相关产品推荐

