J'utilise node-cron pour exécuter des travaux planifiés. Je veux que les travaux soient exécutés toutes les 45 minutes, mais ça agit étrangement
Voici le motif que j'utilise
'00 */45 * * * *'
J'ai commencé mon script à Tue Jun 17 2014 08:17:39 GMT+0000 (GMT)
Voici les deux premières fois où le travail a été exécuté
1. Tue Jun 17 2014 08:45:03 GMT+0000 (GMT)
2. Tue Jun 17 2014 09:00:01 GMT+0000 (GMT)
3. Tue Jun 17 2014 09:45:02 GMT+0000 (GMT)
Ce n'est certainement pas ce que j'attendais ou voulais. Tout ce que je veux, c'est lancer les Jobs toutes les 45 minutes. Quelqu'un peut-il m'aider avec le motif? Merci :)
Vous cherchez probablement
0 */45 * * * *
Les plages sont ici .
Je connais mieux cron que node-cron , mais j’ai jeté un coup d’œil à la documentation.
Si je comprends bien, node-cron utilise une syntaxe similaire à celle utilisée par cron, mais avec un champ "secondes" supplémentaire. Alors, où un travail cron pourrait avoir:
# min hour mday month wday command
*/15 * * * * some-command
pour planifier l'exécution de some-command
toutes les 15 minutes, node-cron utiliserait une syntaxe similaire pour spécifier l'heure d'exécution:
'0 */15 * * * *'
(avec un champ supplémentaire pour spécifier les secondes), mais il exécute une fonction JavaScript spécifiée, pas une commande externe.
Dans cron standard, aucune syntaxe ne permet de spécifier l'exécution d'un travail toutes les 45 minutes. Une spécification de 0/45 * * * *
exécuterait un travail deux fois par heure, à 0 et 45 minutes après l'heure. Pour exécuter un travail toutes les 45 minutes (à minuit, 00h45, 1h30, 2h15, ..., soit 32 fois par jour), vous devez le planifier pour s'exécuter toutes les 15 minutes invoquez ensuite un script qui vérifie l'heure actuelle pour décider de faire ou non quelque chose.
Ou vous pouvez écrire une liste exhaustive de toutes les heures où vous souhaitez exécuter le travail:
0 0 * * * some-command
45 0 * * * some_command
30 1 * * * some_command
15 2 * * * some_command
# 28 lines omitted
Je voudrais certainement écrire un script pour générer cette liste.
(Ceci est réalisable parce que 24 heures est un multiple de 45 minutes. Vous ne pouvez pas exécuter quelque chose toutes les 35 minutes de cette façon.)
Une approche similaire devrait fonctionner pour node-cron. Planifiez l'exécution de la fonction toutes les 15 minutes et appelez une fonction qui vérifie l'heure actuelle pour décider si elle doit être exécutée. Par exemple, vous pouvez vérifier si le nombre de minutes depuis minuit modulo 45 est zéro. (Vous voudrez peut-être autoriser un léger écart au cas où la planification ne serait pas exacte.)
Je ne connais pas assez bien JavaScript pour suggérer la meilleure façon d'écrire cette fonction, mais elle devrait être relativement simple.
Ou écrivez 28 lignes pour spécifier toutes les heures que vous souhaitez exécuter.
Il n'y a aucun moyen direct de le faire. Cependant, nous pouvons obtenir le résultat en interceptant la planification à l'aide d'une commande Shell dans le script cible.
Tout d’abord, lancez le script toutes les 15 minutes:
*/15 * * * * <target_script>
Ensuite, dans le target_script, placez le code suivant avant les codes réels:
#!/bin/sh
# Exit except at 0:45, 1:30, 2:15, 3:00, 3:45 etc
if ! echo "((`date +%-H`*60)+`date +%-M`)/45" | bc -l | grep "\.0*$" &> /dev/null;
then exit 1;
fi
# Your actual code goes here;
Vous devez écrire un script en tant que wrapper pour décider si la commande doit être exécutée toutes les 45 minutes. C'est 0, 45, 30 (= 45 + 45 - 60), 15 (= 30 + 45 - 60), 0 (= 15 + 45 - 60). ainsi, les minutes pour exécuter le script doivent être 0,15,30,45
.
La commande date +%M
peut être utile dans le script Shell.
vous pouvez utiliser node-reel
qui est plus lisible, simple et génial ????.
const reel = require('node-reel')
reel().call(() => {
console.log(Date.now());
}).everyFortyFiveMinutes().run()
J'ai essayé avec cela pendant 45 secondes d'intervalle et fonctionne bien
'*/45 * * * * *'
Vous pouvez vous référer à cronr , il prend en charge tous les motifs de macro et fournit une démonstration en ligne cronr - une démonstration en ligne
utiliser Cron NPM quelque chose comme ça
var cronJob = require('cron').CronJob;
var job = new cronJob({
cronTime:'0 */45 * * * *',
onTick: function(){
var my_date = new Date();
var tomorrow_date = my_date.getFullYear() + "-" + ('0'+(my_date.getMonth()+1)) + "-" + (my_date.getDate()+1)
var condition = [{},{$set: {'plannedDeliveryDate' :tomorrow_date +'T00:00:00.000Z'}}]
dbQuery.updateMany(orderModel, condition, function(err, result){
if(result.nModified == result.n) console.log(err, result)
})
},
start:true,
timeZone:'Asia/Kolkata'
});
job.start();