Cronjob issue in nest js - cron

I am facing a weird issue with my cronjob not firing in nest js
I have this example below
#Cron('46 13 01 02 *', {
timeZone: 'Asia/Singapore',
})
I expect the cron job to fire at 1:46PM, on the 1st of February. However, it doesn't. What am i missing?
Thanks in advance!

you misconfigured the cron timing - note that you need 6 * while you have only 5 and also the first one is for seconds.
basically it's that:
* * * * * *
| | | | | |
| | | | | day of week
| | | | month
| | | day of month
| | hour
| minute
second (optional)
so for your case it should be
#Cron(' 0 46 13 01 02 *', {
timeZone: 'Asia/Singapore',
})

Related

Generate cron expression for two years

I need to generate cron expression for every 10 min in the date range October 2017 to Feburary 2018.
I tried the following expression:
0 10 0 ? 10-2 * 2017-2018,
But its not a valid expression. I get this error message:
((Month) - Unsupported value '10-2' for range. ),
Please help.
Try to use this:
*/10 * * 2-10 * 2017,2018 command here
from nncron.ru page:
* * * * * *
| | | | | |
| | | | | +-- Year (range: 1900-3000)
| | | | +---- Day of the Week (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month (range: 1-31)
| +---------- Hour (range: 0-23)
+------------ Minute (range: 0-59)
if you want to test other format, use this page http://cronsandbox.com/

Unable to understand the particular format of Cron?

I have read the CronFormat to understand the Cron.But I am unable to understand this Cron Format:
According to my understand,the format is
<Minute> <Hour> <Day_of_the_Month> <Month_of_the_Year> <Day_of_the_Week>
But I am unable to understand the below format.
07/10 * 1/1 *?*
My Understanding:
My understanding of the above format is:
After Every 7 Minute,every hour and every month and every year.
Can anyone guide me what is it?
QuestionMark(?) and * I have not understood
This is format of each cron job
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
so 7/10 means 7th minute of every 10 minute,
next * means every hour,
1/1 also means every so every day.
Unfortunately I am also not aware of "?".
I like this example its easy for me to understand :-
# Minute | Hour | Day of Month | Month | Day of Week | Command
# (0-59) | (0-23) | (1-31) | (1-12 or Jan-Dec) | (0-6 or Sun-Sat)
0 | 2 | 12 | * | * | /usr/bin/find

Cron Job only specific months

I would like to set up a cron task to run a script every first day of every month except 1st january. How can I do that?
Could I try something like that: 0 0 1 2-12 * ?
It can be something like below:
0 0 1 2,3,4,5,6,7,8,9,10,11,12 *
Minutes [0-59]
| Hours [0-23]
| | Days [1-31]
| | | Months [1-12]
| | | | Days of the Week [Numeric, 0-6]
| | | | |
* * * * * home/path/to/command/the_command.sh
This is can be usefull for you to identify the usage.

whats the cron format for the following

I need to run bash script at 2nd Sat of the month at 11pm.I cant figure out its cronformat.
* * * * * *
| | | | | |
| | | | | +-- Year (range: 1900-3000)
| | | | +---- Day of the Week (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month (range: 1-31)
| +---------- Hour (range: 0-23)
+------------ Minute (range: 0-59)
This is the cronformat i found from the internet but i am new to this and i think this problem is kind of tough.
Arg i waited so many days for the solution but not a single comment nor an answer. Anyway i think the answer is
0 23 8-14 * Sat
please correct me if i am wrong.
Run the cron every Saturday and only execute the script on the second Saturday:
* * * * 6 * test $(expr $(date +\%d) / 7) -eq 2 && <execute script here>

Cron expression

How would I go about writing a Cron expression to trigger every day at 8am and 3:30pm?
I understand how to create an expression to fire once a day, just not at multiple set times.
Thanks in advance
You should just use two lines.
0 8 * * * command
30 15 * * * command
Of course in typical /etc/cron.d format, include the user as arg 6. Expression notation (in all the versions I know of) will get you something other than what you want (e.g. the expressions are additive in nature, so it will run more than you want).
Just in case you need to create Cron Expressions in future using Java Language,
Here is an API available with Verbal Coding style
https://github.com/mabidshafiq/VerbalCronExpression
Example for your scenario is,
String exp = ce.cronExp()
.minuteOfHour("0")
.hourOfDay("8")
.everyDay()
.everyMonth()
.generate();
It will generate 0 8 * * *
and for your understanding
* * * * * *
| | | | | |
| | | | | +-- Year (range: 1900-3000)
| | | | +---- Day of the Week (range: 1-7, 1 standing for Monday)
| | | +------ Month of the Year (range: 1-12)
| | +-------- Day of the Month (range: 1-31)
| +---------- Hour (range: 0-23)
+------------ Minute (range: 0-59)
Make it easy, use once made components- eg. Crontab generator :o)

Resources