Je souhaite créer un travail cron pour envoyer un courrier toutes les 15 minutes en prenant des données d'une table de base de données. Dans le nœud js, je peux effectuer un travail cron, mais à travers PM2, je ne comprends pas où placer le code et comment il fonctionne.
merci pour votre réponse; je le fais de cette façon et viens de définir l'email
2 . Var crontab = require ('node-crontab');
var jobId = crontab.scheduleJob ("*/15 * * * *", function () {
//This will call this function every 15 minutes
console.log("It's been 15 minutes!");
});
Utilisez l'option --cron
:
-c --cron
<cron_pattern>
Par exemple:
pm2 start sendMail.js --cron "*/15 * * * *"
Pm2 va maintenant redémarrer le script sendMail.js
toutes les heures et 15, 30 et 45 minutes après l'heure
C'est ce qui a fonctionné pour moi, J'ai divisé le cron dans un fichier différent qui s'exécute dans un processus différent car je veux libérer des ressources une fois l'exécution de cron terminée.
écosystèmes.config.js:
module.exports = {
/**
* Application configuration section
* http://pm2.keymetrics.io/docs/usage/application-declaration/
*/
apps: [
// Main API Hosting
{
name: 'API',
script: 'bin/www',
env: {
COMMON_VARIABLE: 'true'
},
instances: 1,
exec_mode: 'cluster',
watch: false,
autorestart: true
},
{
name: 'CRON',
script: "crons/cronjob.js",
instances: 1,
exec_mode: 'fork',
cron_restart: "0,30 * * * *",
watch: false,
autorestart: false
}
]
};
Les lignes suivantes sont importantes dans l'exécutable cron
cron_restart: "0,30 * * * *"
<- expression cron
autorestart: false
<- important car sinon pm2 redémarrera immédiatement le cron après avoir terminé
Assurez-vous également que votre instances
est 1, sinon plusieurs processus cron seront exécutés.
Mises en garde principales:
Chaque fois que vous redémarrez tout pm2, le travail cron sera exécuté quelle que soit l'expression de cron. S'il est essentiel de ne l'exécuter qu'à des heures précises, ajoutez cette vérification supplémentaire au début du fichier cron.
if (new Date().getHours() !== 0 ) {
console.log(`Current hours is ${new Date().getHours()}, not running.`)
process.exit(0);
}
Si vous utilisez PM2 -osystems then, dans le fichier de configuration, ajoutez la séquence cron au paramètre script
en le recouvrant de guillemets simples. Les doubles guillemets n'ont pas fonctionné pour moi.
module.exports = {
apps : [{
name : "Send-mail",
script : "./sendMail.js --cron '*/15 * * * *'",
watch : true
}]
}
Vous pouvez également utiliser le module node-schedule qui vous permet de définir des règles de style cron. Ensuite, vous pouvez exécuter le script à tout moment dans pm2.