是否有可能在node.js中的特定時間定期調用函數?我的第一個執行是node.js中的Cronjobs
setInterval(functionName(),(24*60*60*1000));
這是最理想的,因爲它會重新開始我每次重新啓動節點的時間。有更好的可能性來實現這個嗎?
是否有可能在node.js中的特定時間定期調用函數?我的第一個執行是node.js中的Cronjobs
setInterval(functionName(),(24*60*60*1000));
這是最理想的,因爲它會重新開始我每次重新啓動節點的時間。有更好的可能性來實現這個嗎?
爲防止重新啓動,您需要創建持久性數據存儲作業。
喜歡的東西:
Job = {
_id: Number,
job: String,
dueDate: Date,
completed: Boolean
}
然後有一些代碼如下:
var createJob = function(url, date) {
var j = db.create(Job, function(j) {
j.job = url;
j.dueDate = date;
j.save();
});
};
var runJob = function(j) {
var id = j._id;
setInterval(j.dueDate - Date.now(), function() {
db.getOne(Job, { _id : id }, function(j) {
require(j.job);
j.finished = true;
j.save();
});
});
j = null;
};
在啓動時你就必須這樣做:
db.get(Job, { finished: false }, function(jobs) {
jobs.forEach(runJob);
});
更換通用db
與MongoDB,CouchDB,Redis等。
假設有多個cron作業正在運行,有什麼辦法只是簡單地殺死其中的一個?因爲我遇到了一個場景,我需要殺死一個工作並做了其他一些維護工作,但我仍然希望其他工作正在運行。謝謝! – zsong 2013-04-24 19:27:41
這是一個古老的問題,但除了被接受的答案之外,一個帶有例子的圖書館值得一提。
cron是一個輕量級的軟件包,它在給定的時間間隔運行指定的函數,僅使用系統的時間和無數據庫持久性。
const CronJob = require('cron').CronJob;
const jobFiveMinutes = require("./job.five-minutes");
const jobMondayMorning = require("./job.monday-morning");
var jobs = [
new CronJob({
cronTime: "00 */5 * * * *", //every five minutes
onTick: function() {
jobFiveMinutes();
},
start: false, //don't start immediately
timeZone: 'America/Los_Angeles'
}),
new CronJob({
cronTime: "00 00 9 * * 1", //9 am Monday morning
onTick: function() {
jobMondayMorning();
},
start: false,
timeZone: 'America/Los_Angeles'
}),
];
jobs.forEach(function(job) {
job.start(); //start the jobs
});
上面我們需要兩個文件,並在兩個cronjob中調用它們,並設置爲不同的時間間隔。該文件只是導出功能:
//job.five-minutes.js
module.exports = function(){
console.log("runs every five minutes")
};
//job.monday-morning.js
module.exports = function(){
console.log("runs every monday morning at 9 am, Los Angeles time")
};
無論您在任何地區本地或遠程服務器上運行它,它會根據傳遞的時區運行(這是可選的,雖然,不要緊,以分鐘爲單位的情況下) 。
此外,重新啓動服務器/腳本將不會影響其工作,因爲它與系統時間同步。作業將在5的每個倍數上運行,即5,10,15,20等等。因此,即使您在24重新啓動腳本,它也會以25而不是29運行。
最後,該軟件包已將cron語法擴展爲在最左側包含秒。因此,你甚至可以知道你想要在哪一秒鐘完成任務。
使用[node-cron](https://github.com/ncb000gt/node-cron)。 – 2011-04-12 13:35:49
@MathiasBynens [node-cron](https://github.com/ncb000gt/node-cron)如何抵抗重啓?對不起,作爲necromant,但這個Q仍然是谷歌搜索結果中的第一個。請注意,'node-cron'不是基於crontables的。 – meeDamian 2013-04-25 10:04:34
@meeDamian node-cron主要按間隔運行腳本,因此它們將在重新啓動時再次開始循環。還有一個選項可以[按日期]運行一次作業(https://www.npmjs.com/package/cron#another-example-with-date),這是一個可能來自持久數據的值資源。 – igneosaur 2016-04-26 00:06:43