Node Scheduler Repetition - node.js

A friend and I are trying to use Node Scheduler to have a discord bot announce things on certain days (Essentially a holiday calendar). We want it to post one pre set message, but it seems to post the messages a random amount of times.
var Hb = schedule.scheduleJob('* 6 14 20 4 *', function(){
bot.channels.get('435858985501982720').send('new message 3');
});
This is our tester code, does anyone know what's wrong?
Edit: we do want specific minutes, idk if that has any affect.

The first argument of schedule.scheduleJob is a string representing when the function should fire, in cron format. According to the documentation you are trying to run the function:
every second
6 minutes past the hour
14th hour (2pm)
20th day of the month
4th month (April)
every day of the week
aka every second at 2:06pm on 20th April every year.
I would rewrite the cron string using the format the docs provided:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun)
│ │ │ │ └───── month (1 - 12)
│ │ │ └────────── day of month (1 - 31)
│ │ └─────────────── hour (0 - 23)
│ └──────────────────── minute (0 - 59)
└───────────────────────── second (0 - 59, OPTIONAL)
e.g. to run at midday on Christmas every year:
schedule.scheduleJob('0 0 12 25 12 *', function(){
bot.channels.get('435858985501982720').send('new message 3');
});

Related

Azure WebJob not accepting a valid(?) CRON expression

I used crontab.guru to create a very simple CRON expression with the desired behavior to execute every day at 3:15 (AM) and this is the result: 15 3 * * *
Unfortunately for me, in Azure Portal this does not work, but if I add a leading 0 to my expression as such, 0 15 3 * * *, Azure will accept it, while crontab.guru will tell me it is wrong. The specification according to crontab.guru is: minute hour date month weekday.
The questions..
From where comes the discrepancy?
Is it Microsoft that in their traditional ways have a proprietary
implementation with a leading zero?
If the standard is minute hour date month weekday, what does the
leading zero describe?
Have a look at the documentation:
Create a scheduled WebJob using a CRON NCRONTAB expression
Timer trigger for Azure Functions
The NCRONTAB expression is composed of 6 fields: {second} {minute} {hour} {day} {month} {day of the week}. A CRON expression has only 5, without the seconds.
So the first 0 describes the seconds.
* * * * * * command to be executed
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ └───── day of week (0 - 7) (0 or 7 are Sunday, or use names)
│ │ │ │ └────────── month (1 - 12)
│ │ │ └─────────────── day of month (1 - 31)
│ | └──────────────────── hour (0 - 23)
│ └───────────────────────── min (0 - 59)
└────────────────────────────── second(0 - 59)

cron job to run each minutes from monday to friday from 9:15AM to 3:30PM

I have to run two cron jobs for the following scenarios.
job1.php Should run once in a day at 9:12 AM on Monday to Friday. (five days in a week)
job2.php Should run in each minutes from 9:15 AM to 3:30 PM on Monday to Friday. (five days in a week)
I have another 4 cron jobs which needs to be implemented in my project. But all that can be derived from the above two scenarios.
First one is easy.
12 9 * * 1-5 <full_path>/job1.php
Second one is tricky. I split that into 3 entries.
15-59 9 * * 1-5 <full_path>/job2.php
* 10-14 * * 1-5 <full_path>/job2.php
0-30 15 * * 1-5 <full_path>/job2.php
Cron Syntax
* * * * * command to be executed
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───── day of week (0 - 6) (0 is Sunday, or use names)
│ │ │ └────────── month (1 - 12)
│ │ └─────────────── day of month (1 - 31)
│ └──────────────────── hour (0 - 23)
└───────────────────────── min (0 - 59)

Cron expression that spans across next day

My job requirement is:
1.Every 15 minutes
2.Everyday morning 8:00am to next day 03:00am
So the job keeps runs every 15 min from 08:00 am to next day 03:00 am.
Can this be achieved using a cron expression.
Tried this but it does not seem to help.
0 0/15 8-3 * * ?
Thanks,
Wajid
*/15 0-2,8-23 * * * test.sh
─┬── ───┬──── ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───── day of week (all)
│ │ │ └─────── month (all)
│ │ └───────── day of month (all)
│ └─────────────── hour (between 0-2 and between 8-23)
└────────────────────── min (every 15 minutes)
Run every 15 minutes, from 12:00am to 02:45am and from 08:00am to 23:45 of every day.
0-2,8-23 is equivalent to 0,1,2,8,9,10,...,23 while */15 is equivalent to 0,15,30,45.
The above will not include 03:00, because the last execution would be 02:45; if we use 0-3 instead of 0-2, it would have also executed at 03:15,30,45.
To be able to include also 03:00,(02:59 actually) we need to be a bit more verbose:
14,29,44,59 0-2,8-23 * * * test.sh

Setting cron task every day at 2am.. makes it run every minute

From what I have read, and wizard generators I have used the following should run the task every day at 2am
* 2 * * * <my task here>
However, looking at the logs it has actually fired the task for each minute in the 2am hour, in other words 60 times in total. What am I doing wrong here? Or are these generators just rubbish. Thanks
This runs the script every minute of 2am (02:00, 02:01, 02:02 and so on):
* 2 * * *
While This runs the script at 02:13am (of each day of each month)
13 2 * * *
* * * * * command to execute
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───── day of week (0 - 7) (0 to 6 are Sunday to Saturday, 7 is Sunday again)
│ │ │ └────────── month (1 - 12)
│ │ └─────────────── day of month (1 - 31)
│ └──────────────────── hour (0 - 23)
└───────────────────────── min (0 - 59)
You are writing the command wrong. Try this:
0 2 * * * <task>
This version execute the task at minute 0, yours execute at all minutes (*)

Cronjob for 1st of January every year

I am trying to get the correct cronjob time for 1st of January every year.
I thougth about this: 0 0 1 1 *
Can anybody tell me, if it is correct?
Yes that is correct.
Here is a quick chart you can use for future reference
# * * * * * command to execute
# ┬ ┬ ┬ ┬ ┬
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ └───── day of week (0 - 6) (0 to 6 are Sunday to Saturday)
# │ │ │ └────────── month (1 - 12)
# │ │ └─────────────── day of month (1 - 31)
# │ └──────────────────── hour (0 - 23)
# └───────────────────────── min (0 - 59)
Yes, and you can also use #yearly or #annually which are synonyms for 0 0 1 1 *.
(This applies at least to many distributions, but check yours to be sure.)
See also: man 5 crontab and http://en.wikipedia.org/wiki/Cron
Yes, that looks like the very new year midnight.

Resources