问题描述
我正在尝试运行一个功能,该功能将搜索某些参数,并且每天仅向用户发送一次电子邮件。
我发现可以完成许多方法。 似乎setInterval()可以做到这一点。
setInterval(function () {
var date = new Date();
if (date.getDate() === 12 && date.getHours() === 10 && date.getMinutes === 0) {
alert("Surprise!!")
}
}, 1000)
例如,以上内容每天都会在上午10点触发。
我还发现有一个运行cron作业的软件包。
看来我可以设定一项日常工作来每天发送电子邮件。 我从未使用过cron作业,因此我认为此刻对我而言这将更加困难。
最后,我也找到了这样做的方法:
仅具有常规功能。
似乎setTimeout()是完成它的最简单方法。 但是有什么挫折吗? 我不想错过电子邮件,或者不想多次错过电子邮件用户。 我的网站正在运行并且还在不断发展,所以我不愿发现困难的方法。
任何帮助表示赞赏。
1楼
我认为您必须使用Meteor.setInterval()
而不是setInterval()
才能使其在服务器上正常工作。
但是,我用这个功能我需要运行每秒 ;
在更长的时间内,任何类型的cron作业包也可以正常工作,例如synced-cron
。
2楼
因此,完成本主题并可能在相同情况下帮助任何人。 这就是我做的。 我添加了软件包“ percolate:synced-cron”。 然后在服务器端,我创建了一个文件“ cron.js”。 这是我使用的代码。 为了隐私起见,我删除了功能的其余部分,但是重要的部分在这里。 parser.text使得选择时间变得非常容易。 “每5秒”(每5秒执行一次操作)..或(“上午10点”)将每天上午10点采取措施。 请记住,mongo在UTC时间中设置为标准时间,因此您必须进行转换。
if (Meteor.isServer) {
// optionally set the collection's name that synced cron will use
SyncedCron.config({
collectionName: 'somethingDifferent'
});
SyncedCron.add({
name: 'Crunch some important numbers for the marketing department',
schedule: function(parser) {
// parser is a later.parse object
// return parser.text('every 5 seconds');
return parser.text('at 3:00 am');
// midnight is at 5pm LA time ... 10 am LA time is 3 am UTC
},
job: function(intendedAt) {
var today = new Date();
var yesterday = new Date()
var dayBeforeYesterday = new Date()
yesterday.setDate(today.getDate() - 1)
dayBeforeYesterday.setDate(today.getDate() - 2)
var todaysUsers = Meteor.users.find({ createdAt: { $lt: (yesterday), $gt: dayBeforeYesterday } }).fetch()
//rest of function here
}
}
});
Meteor.startup(function () {
// code to run on server at startup
SyncedCron.start();
// Stop jobs after 15 seconds
// Meteor.setTimeout(function() { SyncedCron.stop(); }, 7 * 1000);
});
}
3楼
我建议使用诸如类的软件包来实现此目的。