データベーステーブルからデータを取得して、15分ごとにメールを送信するcronジョブを作成します。ノードjsではcronジョブを作成できますが、PM2を介してコードを配置する場所とその仕組みを理解できません。
ご回答ありがとうございます。このようにして、メールを設定するだけです
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!");
});
--cron
オプションを使用します。
-c --cron
<cron_pattern>
例えば:
pm2 start sendMail.js --cron "*/15 * * * *"
Pm2は、今すぐsendMail.js
スクリプトを再起動し、1時間の15、30、45分に再起動します
PM2 ecosystem を使用する場合、構成ファイルでscript
paramにcronシーケンスを単一引用符でラップして追加します。どういうわけか二重引用符は私にとってうまくいきませんでした。
module.exports = {
apps : [{
name : "Send-mail",
script : "./sendMail.js --cron '*/15 * * * *'",
watch : true
}]
}
あるいは(私の好み)
module.exports = {
apps : [{
name : "Send-mail",
script : "./sendMail.js",
cron_restart: "*/15 * * * *",
watch : true
}]
}
これは私のために働いたものです、cronが実行を完了した後にリソースを解放したいので、cronを別のプロセスで実行される別のファイルに分割します。
ecocosystem.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
}
]
};
Cron実行可能ファイルでは次の行が重要です
cron_restart: "0,30 * * * *"
<-cron式
autorestart: false
<-重要です。そうでない場合、pm2は完了後すぐにcronを再起動します
また、instances
が1であることを確認してください。そうでない場合、複数のcronプロセスが実行されます。
重要な注意事項:
Pm2をすべて再起動するたびに、cronジョブはcron式に関係なく実行されます。特定の時間にのみ実行することが重要な場合は、cronファイルの先頭にこの追加チェックを追加します
if (new Date().getHours() !== 0 ) {
console.log(`Current hours is ${new Date().getHours()}, not running.`)
process.exit(0);
}
Node-scheduleモジュールを使用して、cronスタイルのルールを定義することもできます。その後、pm2でプログラムを通常どおり実行できます。多くのプロジェクトでPM2でこれを使用しますが、決して私を失望させませんでした。
var schedule = require('node-schedule');
var rule = new schedule.RecurrenceRule();
rule.hour = [10]; // 10am
rule.minute = [0]; // 0mins
var job = schedule.scheduleJob(rule, function(){
console.log("10am every day")
});
//Rule 2 - 6am every wednesday
var rule2 = new schedule.RecurrenceRule();
rule2.dayOfWeek = 3; // 0 = Sunday
rule2.hour = 6;
rule2.minute = 0;
var job2 = schedule.scheduleJob(rule2, function(){
console.log("Every Wednesday @ 6am");
});
var rule3 = new schedule.RecurrenceRule();
rule3.minute = [0, 15, 30, 45]; // Specific Minutes
var job3 = schedule.scheduleJob(rule3, function(){
console.log("Run at specific minutes")
});
CRONスタイルのルールもサポートしていますが、上記の方法の方が好きです。
https://www.npmjs.com/package/node-schedule のドキュメントをご覧ください