Weekly scheduling of circleci job? - jmeter

I would like to run jmeter tests in weekly basis.
I have the below code now:
nightly:
triggers:
- schedule:
cron: "0 0 13 ? * SAT *"
filters:
branches:
only:
- master
- beta
Does it run everyday because of nightly: or does it run weekly because of cron: "0 0 13 ? * SAT *". If it is daily, how can I convert to run weekly?

"nightly" is just the name of the Circle CI workflow. It could just as easily be "foo" or "bar". The scheduling is in the cron line, where you specify 5 things: the Minute, Hour, Day of the month, Number of the month and Day of the week that you want the job to run.
For example, to run the workflow every Saturday at 1 pm, you could use "0 13 * * 6".
Using the asterisk (*) in a field means any value of that field is acceptable. Be aware that Circle CI will interpret the time as UTC so you may need to adjust it based on your timezone. https://crontab.guru/ is a nice site for learning about and experimenting with cron entries.

Related

Is there a way I can run my cypress script on the cloud?

I know I could use a CI pipeline tool but I tried using circleci and i could only run this one an hour and I wanted to run it once a day.
So is there any online tools/frameworks/sites that will schedule and a cypress test/script once a day?
I'm a bit of a novice at this point...
Easily you can try with GitHub action,
You can try the following configurations in your workflow:
on:
schedule:
- cron: '0 1-23 * * *'
- cron: '0 0 * * *'
jobs:
test_schedule:
name: Test schedule
runs-on: ubuntu-latest
steps:
- name: Skip this step every 24 hours
if: github.event_name == 'schedule' && github.event.schedule != '0 0 * * *'
run: echo "This step will be skipped every 24 hours"
The first cron ’ 0 1-23 * * *’ will trigger the workflow hourly from the 1st hour to 23th hour.
The second cron ’ 0 0 * * *’ will only trigger the workflow at 00:00 UTC.
The property " github.event.schedule" of the github context 8 returns the cron of the schedule that triggers the current workflow run.
On the step that need to be skipped every 24 hours, set the if conditional to check which cron of the schedule triggers the current workflow run. If the cron is not ’ 0 0 * * *’, execute this step, otherwise skip this step.
And If circleci scheduled workflow
ex:
workflows:
version: 2
release:
jobs:
- test:
triggers:
- schedule:
cron: "0 0 * * *"
this results in a build EVERY midnight
Using the asterisk (*) in a field means any value of that field is acceptable. Be aware that Circle CI will interpret the time as UTC so you may need to adjust it based on your timezone. https://crontab.guru/ is a nice site for learning about and experimenting with cron entries.

AWS Cron to run a lambda once every day monday to friday?

I am currently using the cron 'cron(0 9 ? * MON-FRI *)' in AWS cloudwatch but it seems to run it continuous every minutes for that hour, what am I doing wrong?
I wanted it to run every weekday (mon-fri) at 9am on the dot.
I would try 0 9 * * 1-5
You can debug it here for instance: https://crontab.guru/#0_9_*_*_1-5
You should use -> 0 9 ? * MON-FRI *

I want schedule a task for every 24 hours by using cron expression settings

I want to schedule a method to run every 24 hours and with the settings I have it is executing every 24 minutes.
I have referred below URL's which has different suggestions
Link 1 suggests <second> <minute> <hour> <day-of-month> <month> <day-of-week> <year> <command>
Link 2 suggests minute hour day(month) month day(week)
Below are the cron settings put in the application.yml of my Spring Boot application.
cron:
job:
expression: 0 0 23 * * ?
Could someone help on what are the correct source of information and what can be the settings with the requirements at hand.
0 0 * * *
This will run job at 12:00 am every day
If you run the scheduled job in spring the record must be as mentioned in first link:
0 0 23 * *
This will run the job at 23:00:00 every day
0 0 0 */1 * *
I am using this command to run once everyday. You can also use
0 0 0/24 * * *
to run once every 24 hours

Will this code work over a new year?

Basically, I have a series of commands I want to run every other sunday. I set a cron task to run the script every sunday, then this script only allows the script to run on even weeks, thus it only runs every other sunday. My question is, will this script still work going from year to year.
if [ $(($(date +'%U') % 2)) -eq 0 ]
then
some command
fi
You have what's known as the XY problem here.
You have a problem with this part of your shell script, and you want to solve the problem by fixing the script. In reality, fixing the root cause of the problem is easier.
Simply alter your cron job to run every other Sunday:
#----+-----+-----+-----+-----+-------------------------------------------------
#min |hour |day |month|day |command
# | |of mn| |of wk|
#----+-----+-----+-----+-----+-------------------------------------------------
03 04 * * 7 expr `date +%W` % 2 >/dev/null || fortnightly.sh
See How to instruct cron to execute a job every second week? for more info.
If you don't want to specify this with cron syntax, you can use the %s format instead of %U. This will give you the number of seconds since 1st Jan 1970 UTC. You can divide this to get a week number:
$(($(date +'%s') / 604800))
Then you can do your modulo test on that.
Note the number 604800 = 7 * 86400 = 7 * 24 * 60 * 60 ie the number of seconds in one week.
If you're running this every day, you'll want to know that it's actually a Sunday. So in this case, you would divide by 86400 to get a day number. Then, armed with the knowledge that day zero was a Thursday, you can check that the result (modulo 14) is either 3 or 10, depending on which Sunday you started at.

How to schedule to run first Sunday of every month

I am using Bash on RedHat. I need to schedule a cron job to run at at 9:00 AM on first Sunday of every month. How can I do this?
You can put something like this in the crontab file:
00 09 * * 7 [ $(date +\%d) -le 07 ] && /run/your/script
The date +%d gives you the number of the current day, and then you can check if the day is less than or equal to 7. If it is, run your command.
If you run this script only on Sundays, it should mean that it runs only on the first Sunday of the month.
Remember that in the crontab file, the formatting options for the date command should be escaped.
It's worth noting that what looks like the most obvious approach to this problem does not work.
You might think that you could just write a crontab entry that specifies the day-of-week as 0 (for Sunday) and the day-of-month as 1-7, like this...
# This does NOT work.
0 9 1-7 * 0 /path/to/your/script
... but, due to an eccentricity of how Cron handles crontab lines with both a day-of-week and day-of-month specified, this won't work, and will in fact run on the 1st, 2nd, 3rd, 4th, 5th, 6th, and 7th of the month (regardless of what day of the week they are) and on every Sunday of the month.
This is why you see the recommendation of using a [ ... ] check with date to set up a rule like this - either specifying the day-of-week in the crontab and using [ and date to check that the day-of-month is <=7 before running the script, as shown in the accepted answer, or specifying the day-of-month range in the crontab and using [ and date to check the day-of-week before running, like this:
# This DOES work.
0 9 1-7 * * [ $(date +\%u) = 7 ] && /path/to/your/script
Some best practices to keep in mind if you'd like to ensure that your crontab line will work regardless of what OS you're using it on:
Use =, not ==, for the comparison. It's more portable, since not all shells use an implementation of [ that supports the == operator.
Use the %u specifier to date to get the day-of-week as a number, not the %a operator, because %a gives different results depending upon the locale date is being run in.
Just use date, not /bin/date or /usr/bin/date, since the date utility has different locations on different systems.
You need to combine two approaches:
a) Use cron to run a job every Sunday at 9:00am.
00 09 * * 7 /usr/local/bin/once_a_week
b) At the beginning of once_a_week, compute the date and extract the day of the month via shell, Python, C/C++, ... and test that is within 1 to 7, inclusive. If so, execute the real script; if not, exit silently.
A hacky solution: have your cron job run every Sunday, but have your script check the date as it starts, and exit immediately if the day of the month is > 7...
This also works with names of the weekdays:
0 0 1-7 * * [ "$(date '+\%a')" == "Sun" ] && /usr/local/bin/urscript.sh
But,
[ "$(date '+\%a')" == "Sun" ] && echo SUNDAY
will FAIL on comandline due to special treatment of "%" in crontab (also valid for https://stackoverflow.com/a/3242169/2919695)
Run a cron task 1st monday, 3rd tuesday, last sunday, anything..
http://xr09.github.io/cron-last-sunday/
Just put the run-if-today script in the path and use it with cron.
30 6 * * 6 root run-if-today 1 Sat && /root/myfirstsaturdaybackup.sh
The run-if-today script will only return 0 (bash value for True) if it's the right date.
EDIT:
Now with simpler interface, just one parameter for week number.
# run every first saturday
30 6 * * 6 root run-if-today 1 && /root/myfirstsaturdaybackup.sh
# run every last sunday
30 6 * * 7 root run-if-today L && /root/lastsunday.sh
There is a hacky way to do this with a classic (Vixie, Debian) cron:
0 9 1-7 * */7
The day-of-week field starts with a star (*), and so cron considers it "unrestricted" and uses the AND logic between the day-of-month and the day-of-week fields.
*/7 means "every 7 days starting from weekday 0 (Sunday)". Effectively, this means "every Sunday".
Here's my article with more details: Schedule Cronjob for the First Monday of Every Month, the Funky Way
Note – it's a hack. If you use this expression, make sure to document it to avoid confusion later.
maybe use cron.hourly to call another script. That script will then check to see if it's the first sunday of the month and 9am, and if so, run your program. Sounds optimal enough to me :-).
If you don't want cron to run your job everyday or every Sunday you could write a wrapper that will run your code, determine the next first Sunday, and schedule itself to run on that date.
Then schedule that wrapper for the next first Sunday of the month. After that it will handle everything itself.
The code would be something like (emphasis on something...no error checking done):
#! /bin/bash
#We run your code first
/path/to/your/code
#now we find the next day we want to run
nskip=28 #the number of days we want to check into the future
curr_month=`date +"%m"`
new_month=`date --date='$nskip days' +"%m"`
if [[ curr_month = new_month ]]
then
((nskip+=7))
fi
date=`date --date='$nskip days' +"09:00AM %D` #you may need to change the format if you use another scheduler
#schedule the job using "at"
at -m $date < /path/to/wrapper/code
The logic is simple to find the next first Sunday. Since we start on the first Sunday of the current month, adding 28 will either put us on the last Sunday of the current month or the first Sunday of the next month. If it is the current month, we increment to the next Sunday (which will be in the first week of the next month).
And I used "at". I don't know if that is cheating. The main idea though is finding the next first Sunday. You can substitute whatever scheduler you want after that, since you know the date and time you want to run the job (a different scheduler may need a different syntax for the date, though).
try the following
0 15 10 ? * 1#1
http://www.quartz-scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
00 09 1-7 * 0 /usr/local/bin/once_a_week
every sunday of first 7 days of the month

Resources