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

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();

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 setinterval with Nodej.s for a specific time of day?

I have the following function that runs every hour but I would like it to run once per day at 3 AM:
setInterval(async () => {
await updateData();
}, 1000 * 60 * 30);
How can I achieve this?
setInterval doesn't have this functionality directly. You could play around with date math to make this happen, but honestly, the easiest approach would probably be to use a thrid-party that does this for you, like node-cron.
First, you'd need to install it:
npm install node-cron
Then, in your code:
cron = require('node-cron');
cron.schedule('0 3 * * *', async () => {
await updateData();
});

NetSuite - suitescript : Rescheduling a Map/Reduce script to Run after a specific time on failure

I am using Suitescript 2.0. There I am trying to reschedule a script for a particular type of error.
I got the below code which can be used to rescheduled the script immediately.
var scriptTask = task.create({
taskType: task.TaskType.MAP_REDUCE
});
scriptTask.scriptId = 'customscript_id';
scriptTask.deploymentId = 'customdeploy_id';
var scriptTaskId = scriptTask.submit();
But I am mainly looking for some option to run it after a certain time like after an hour.
Is it possible to achieve by passing any kind of parameter to the above task?
Any other alternative approach would also helpful.
I had a similar issue, I needed to delay my schedule a certain time in your case a map/reduce script which should be the same.
I fixed it with this approach.
Here is sample code with the approach.
/**
#NApiVersion 2.x
#NScriptType ScheduledScript
#NModuleScope SameAccount
*/
define(['N/file', 'N/record', 'N/render', 'N/runtime', 'N/search', 'N/ui/serverWidget', 'N/format', 'N/task', 'N/log'],
function(file, record, render, runtime, search, serverWidget, format, task, log) {
/**
* Definition of the Scheduled script trigger point.
*
* #param {Object} scriptContext
* #param {string} scriptContext.type - The context in which the script is executed. It is one of the values from the scriptContext.InvocationType enum.
* #Since 2015.2
*/
function execute(scriptContext) {
wait(20000); // it waits 20 sec
//whatever you want to do
}
function wait(ms){
var start = new Date().getTime();
var end = start;
while(end < start + ms) {
end = new Date().getTime();
}
}
return {
execute: execute
};
});

How to call function every given period on a route

I need to call a function every given period of time on a route for example my function:
function hello(){
console.log("Hi")
}
app.post("/", (req,res) => {
res.send("Hi")
hello()
}
Well, I didn't put all the code in my application, just the part that matters, I need to call the hello function every 5 seconds. I need to use this method of calling a given function every given period, in my application.
you can use node-schedule !
for example: Execute a cron job every 5 Minutes = */5 * * * *
var schedule = require('node-schedule');
var j = schedule.scheduleJob('*/5 * * * *', function(){
console.log('The answer to life, the universe, and everything!');
});
Another solution:
setInterval
setInterval(() => {
// do something every 5 seconds
}, 5000);

Run Cron job in node js

I'm using Expressjs
At /routes/index.js i have:
app.group('/test', test => {
const testHandler = new testHandler();
test.get('/test-action', testHandler.testAction.bind(testHandler));
});
At /test/handler.js i have
export class testHandler {
constructor() {
}
/**
* #param req
* #param res
* #param next
* #returns {*}
*/
async testAction(req, res, next) {
// todo code here
}
}
I want to create a cronjob to run that route ( for example localhost:3000/test/test-action ) twice an hour.
With PHP i can do it by * */2 * * * php /path_to_webroot/index.php param1 param2
Is there a similar way to do it with Nodejs?
You can use node-cron. It uses similar syntax as you are using in php.
# min hour mday month wday command
*/15 * * * * some-command
to schedule some-command to run every 15 minutes, node-cron would use a similar syntax to specify the time to run:
'0 */15 * * * *'
Well, you need to define your express routes normally. Then inside your cron function you would make a request to that express route you have defined.
request('http://localhost:3000/test/test-action', function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log('im ok')
// console.log(body)
}
})
You can use `request inside your corn job. This way your API will get called every specific time.

Resources