CRON 作业在计划时间执行两次 (NestJS)

Raj*_*hal 3 cron scheduled-tasks nestjs

我想在我的 NestJs 项目中执行这个 cron 函数:

@Cron('59 23 * * *')
async CashPendingCRON(){
    let stores = await this.storeRepository.find();
    for (let store of stores){
        await this.connection
        .createQueryBuilder()
        .insert()
        .into(CashPending)
        .values([
        { cashPending: store.cashPending, store: store }
        ])
        .execute()
 }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,玉米作业应该在每天晚上 11:59 执行。但它被执行了两次,并且条目被记录在数据库中两次。当我使用像 10 秒这样的间隔 (*/10 * * * * *) 时,它只会被调用一次。

如果有修复或者我做错了什么,请告诉我。

这是我在 app.module.ts 中添加 ScheduleModule 的方法

@Module({
  imports: [
    ScheduleModule.forRoot(),
    ConfigModule.forRoot({
      load: [appConfig, devConfig, stagConfig],
      ignoreEnvFile: true,
      isGlobal: true,
    }),
    TypeOrmModule.forRoot(
      configService.getTypeOrmConfig(),
    ),
    TypeOrmModule.forFeature([
      User,
      Vendor,
      Store,
      Product,
      Category,
      Brand,
      AppVersion
    ]),
    JwtModule.registerAsync({
      imports: [ConfigModule],
      useFactory: async () => ({
        secret: process.env.TOKEN_KEY,
      }),
      inject: [ConfigService],
    }),
    UserModule,
    UserClusterModule,
    StoreModule,
    OperationManagerModule,
    UserBrandModule,
    UserCatalogueModule,
    UserPropertyModule,
    FileModule,
    BrandModule,
    CategoryModule,
    ProductsModule,
    WarehouseModule,
    SubCategoryModule,
    StoreStocksModule,
    WarehouseStockModule,
    RtvStocksModule,
    VendorModule,
    CustomerModule,
    W2sModule,
    S2sModule,
    W2wModule,
    BillerModule,
    WarehouseManagerModule,
    AuthModule,
    OrderModule,
    GRNModule,
    SKUTimelinesModule,
    BannerModule,
    OrderReturnModule,
    UtilModule,
    POModule,
    AppVersion,
    S2wModule,
    CashOutModule
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Run Code Online (Sandbox Code Playgroud)

请帮忙。谢谢。

小智 6

我遇到了这个问题并通知 name 属性为我解决了这个问题:

@Cron(CronExpression.EVERY_10_SECONDS, { name: 'nameOfJob'})
Run Code Online (Sandbox Code Playgroud)