我想做一个cron作业,每15分钟发送一次从数据库表中获取数据的邮件.在节点js中,我可以创建一个cron作业但是通过PM2,我不知道在哪里放置代码以及它是如何工作的.
Rob*_*bie 81
使用--cron
选项:
-c --cron
<cron_pattern>
例如:
pm2 start sendMail.js --cron "*/15 * * * *"
Pm2现在将sendMail.js
在一小时内重新启动脚本,并在一小时后的15,30 和45分钟重新启动脚本
Jas*_*son 15
如果执行以下命令:
pm2 start handle-cron.js --cron "*/15 * * * *"
Run Code Online (Sandbox Code Playgroud)
PM2 将启动您的 cron 作业,但它也会在完成后不断重新启动 cron 作业。 - 无限循环
您希望将实例设置为 1 并设置不自动重启。
pm2 start handle-cron.js --no-autorestart --instances 1 --cron "0 * * * *"
Run Code Online (Sandbox Code Playgroud)
Ada*_*ela 10
如果您使用PM2 生态系统,则在配置文件中,script
通过用单引号将cron序列添加到param中。不知何故,双引号对我不起作用。
module.exports = {
apps : [{
name : "Send-mail",
script : "./sendMail.js --cron '*/15 * * * *'",
watch : true
}]
}
Run Code Online (Sandbox Code Playgroud)
或者(我的偏好)
module.exports = {
apps : [{
name : "Send-mail",
script : "./sendMail.js",
cron_restart: "*/15 * * * *",
watch : true
}]
}
Run Code Online (Sandbox Code Playgroud)
这对我来说是有效的,我将cron拆分为一个在不同进程中运行的文件,因为我想在cron完成执行后释放资源。
生态系统.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
}
]
};
Run Code Online (Sandbox Code Playgroud)
以下行在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);
}
Run Code Online (Sandbox Code Playgroud)
Mil*_*ata -9
谢谢您的回答; 我这样做,只需设置电子邮件
1.
npm install node-crontab
Run Code Online (Sandbox Code Playgroud)
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!");
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
17473 次 |
最近记录: |