Schedule task for every 4 hours in Node.js - node.js

How could I schedule a task to run after 4 hours using "node-schedule" in Node.js
Currently my code is as below but it isn't responding as expected.
var schedule = require('node-schedule');
var task = schedule.scheduleJob('* */4 * * *', function () {
console.log('Scheduled Task');
});

Your syntax creates a cron that runs every minute every 4 hours.
The syntax you are looking for is 0 */4 * * *. Wich executes ONCE every 4 hours.
You can test the cron syntax with the website http://crontab.guru
Another option setting your cron in node is using rules. See https://github.com/node-schedule/node-schedule
var cron = require('node-schedule');
var rule = new cron.RecurrenceRule();
rule.hour = 4;
rule.minute = 0;
cron.scheduleJob(rule, function(){
console.log(new Date(), 'Every 4 hours');
});

try this
var cron = require('node-schedule');
var rule = new cron.RecurrenceRule();
rule.hour = new cron.Range(0,23,4);
rule.minute = 0;
cron.scheduleJob(rule, function(){
console.log(new Date(), 'Every 4 hours');
});
new cron.Range(0,23,4); 4 is the optional step parameter

Related

Job scheduling in node.js

I want to develop an app which needs to run a scheduled job which writes something to database for every 15 minutes from 9 am to 9 pm
How can i implement this?
Thanks
Look into this package: https://www.npmjs.com/package/node-cron
Here's an example from their docs:
var cron = require('node-cron');
cron.schedule('*/2 * * * *', () => {
console.log('running a task every two minutes');
});
To write to the database the details vary based on what database you're using exactly. For simplicity you can use Express to connect + write to a DB quickly.
Read more here: https://expressjs.com/en/guide/database-integration.html
You can do this.
const CronJob = require("cron").CronJob;
console.log("Before job instantiation");
const job = new CronJob("0 */15 9-21 * * *", function () {
const d = new Date();
console.log("Every 15 minutes between 9-21:", d);
});
console.log("After job instantiation");
job.start();

How can I execute multiple cron jobs at different timings using node-cron in nodejs?

How can I execute this with different timings? Please help on this. Thanks in Advance...
const Cron = require('node-cron');
const Cron2 = require('node-cron');
var TaskOne = Cron.schedule('*/10 * * * *', async() => {
//first job implemented here and its working fine
function1();
});
var TaskTwo = Cron2.schedule('*/11 * * * *', async() => {
// Second job implemented here....
//Why this block is not getting executed???????????????????????
function2();
});
How can I execute this with different timings? TaskTwo is not getting executed. Debugger not goes into TaskTwo. Please help on this. Thanks in Advance...
if node-cron is not the only prefrence for you then you can use https://github.com/agenda/agenda
There's no need to require the same package twice, so you should remove Cron2 on the second line. Thus the line var TaskTwo = Cron2.schedule('*/11 * * * *', async() => { should be changed to:
var TaskTwo = Cron.schedule('*/11 * * * *', async() => {
As for why the second schedule is not working, it might be because you didn't start() the schedule, as shown in https://github.com/node-cron/node-cron#start. So adding the code below at the end of your script might trigger both cron to run:
TaskOne.start();
TaskTwo.start();

CronJob executing only once

I'm using CronJob for NodeJS https://github.com/kelektiv/node-cron
I don't understand why but my CronJob is running only once. It is supposed to run once every 10 seconds but after the first run it doesn't restart.
async function Job(moneda, condicion) {
console.log('init');
var res = await Analyzer.GetSpread(moneda);
var spread = res.MaxExchange.Bid/res.MinExchange.Ask;
console.log('Spread: ' + spread + 'Moneda: ' + moneda);
if (await condicion.CumpleCondicion(spread)){
var ids = await db.GetSuscripciones();
var mensaje = 'Spread: ' + spread.toFixed(3) + '\nMenor Ask: ' + res.MinExchange.Exchange + '--> ' + res.MinExchange.Ask + '\nMayor Bid: ' + res.MaxExchange.Exchange + '--> ' + res.MaxExchange.Bid;
for (var i = 0, len = ids.length; i < len; i++) {
bot.SendAlert(ids[i].id,mensaje);
}
}
console.log('end'); //this is reached
}
exports.Start = function(value){
condicionBTC = new condicionState('btc');
new CronJob('*/10 * * * * *', Job('btc',condicionBTC), null, true, 'America/Los_Angeles');
}
And this is printed in the console (only once)
init
Spread: 1.007141110114658 Moneda: btc
cumple condicion 1.007141110114658
end
If there's some exception stopping the cron job, where should I catch it so I can see what's going on?
I've added this
var job = new CronJob('*/10 * * * * *', Job('btc',condicionBTC), null, true, 'America/Los_Angeles');
setInterval(function(){ console.log(job.running); }, 3000);
and keeps printing true
Your cron pattern is wrong. According to https://github.com/kelektiv/node-cron :
"this library has six fields, with 1 second as the finest granularity."
Seconds: 0-59
Minutes: 0-59
Hours: 0-23
Day of Month: 1-31
Months: 0-11 (Jan-Dec)
Day of Week: 0-6 (Sun-Sat)
So your cron pattern is trying to run every 10th of a second, which is not possible.
Try replacing your cron pattern with '10 * * * * *'

How Can I Console.log countdownjs module via node.js

I'm using countdownjs module
, How Can I Console.log countdownjs for 3 days later, via node.js?
Here is a small example how you can use the countdown module:
var now = new Date();
var durationInDays = 3;
var durationInMilliseconds = (durationInDays * 24 * 60 * 60 * 1000);
var future = now.getTime() + durationInMilliseconds;
var countdownInfo = countdown(now, future);
// print it once
console.log(countdownInfo.toString());
// print it every 5 seconds
function repeatedPrint() {
setTimeout(function () {
// you have to provide a new start date to get updated information
countdownInfo = countdown(new Date(), future);
console.log(countdownInfo.toString());
repeatedPrint();
}, 5 * 1000);
}
repeatedPrint();

Exception Dates Array handling in Nodejs Cron

I'm using Cron; a nodejs package for cron job handling in NodeJs. Here's how I'm running a cron job:
var job = new CronJob({
cronTime: '00 30 11 * * 1-5',
onTick: function() {
/*
* Runs every weekday (Monday through Friday)
* at 11:30:00 AM. It does not run on Saturday
* or Sunday.
*/
}
});
job.start();
It's running flawlessly but is there any standard way to handle exception dates array handling? For example here's my dates array of national holidays and I don't want to run my cron job on these days:
['28-01-2017', '1-05-2017', '14-08-2016', '15-09-2016', '16-09-2016']
You can not add exclusions to your cron job. You are much better off adding to your code the logic to not run on those days.
var job = new CronJob({
cronTime: '00 30 11 * * 1-5',
onTick: function() {
var exclude = ['28-01-2017', '1-05-2017', '14-08-2016', '15-09-2016', '16-09-2016']
if (exclude.indexOf(convertDate()) > -1) {
console.log('dont run');
} else {
console.log('run');
}
}
});
job.start();
function convertDate() {
var d = new Date();
return [pad(d.getDate()), pad(d.getMonth()+1), d.getFullYear()].join('-');
}
function pad(s) {
return (s < 10) ? '0' + s : s;
}

Resources