1
votes

NestJs comment exécuter une tâche cron 3 fois par jour à des heures spécifiques

Je suis en train de créer une méthode de déclenchement de notifications et je voulais être exécutée 3 fois par jour à des heures spécifiques.

J'ai vérifié la documentation mais je n'ai pas compris ce code regex et comment le personnaliser comme j'en ai besoin!

Maintenant, ma méthode ressemble à ceci: (elle s'exécute maintenant toutes les minutes à la 45e seconde pour les tests) J'en ai besoin, par exemple fonctionne à 18h, 20h, 23h tous les jours

@Cron('45 * * * * *')
async sendNotificaiotns() {
    console.log('sending notification');

    try {
        const randomArticle = await this.articleRepository
            .createQueryBuilder()
            // .select("id")
            // .getMany();
            // .select("id")
            .orderBy("RAND()")
            .limit(1)
            .getOne();

        const input = new NotificationBySegmentBuilder()
            .setIncludedSegments(['Active Users', 'Inactive Users'])
            .notification() // .email()
            .setAttachments({
                data: {
                    ...randomArticle,
                },
                big_picture: encodeURI(randomArticle.image)
            })
            .setHeadings({ 'en': randomArticle.title })
            .setContents({'en': randomArticle.excerpt })
            .build();

        console.log(randomArticle);
        await this.oneSignalService.createNotification(input);

    } catch (e) {
        console.log(e);
    }
}


0 commentaires

3 Réponses :


2
votes

Si vous devez l'exécuter à 18 h, 20 h et 23 h, essayez quelque chose comme ça. (Utilisez votre fuseau horaire)

var cron = require('node-cron');

cron.schedule('0 18,20,23 * * *', () => {
   console.log('Runing a job at 6pm,8pm and 11pm at America/Sao_Paulo timezone');
 }, {
   scheduled: true,
   timezone: "America/Sao_Paulo"
 });

J'ai utilisé node-cron ici. https://www.npmjs.com/package/node-cron p >

J'espère que cela vous aidera.


0 commentaires

1
votes

Vous pouvez utiliser le site crontab.guru comme terrain de jeu pour modèles crontab. Il fournit également des exemples compréhensibles et astuces .

Comme déjà mentionné dans un autre modèle de réponse qui vous convient serait 0 18,20,23 * * * , vous pouvez le modifier et voir comment il a changé ici .


0 commentaires

1
votes

Veuillez changer votre cron comme indiqué ci-dessous:

@Cron('0 0 18,20,23 * * *')

Le cron donné ci-dessus exécutera votre fonction tous les jours à 18 h, 20 h et 23 h.


1 commentaires

comment spécifiez-vous le fuseau horaire dans l'annotation?