Cron: Difference between revisions
(→Crontab Options: edit -r) |
(remove both bash scripts with refactored bash scripts, remove cronjob script with an additional bash script) |
||
Line 91: | Line 91: | ||
== Examples == | == Examples == | ||
=== Bash Script (cronjob.sh) To Build Environment (via Singularity) & Run Python Script === | |||
<pre> | <pre> | ||
#!/bin/bash | |||
# | |||
#SBATCH --job-name=dtn-cronjob | |||
# | |||
# Number of tasks needed for this job. Generally, used with MPI jobs | |||
#SBATCH --ntasks=1 | |||
#SBATCH --partition=short | |||
# | |||
# Time format = HH:MM:SS, DD-HH:MM:SS | |||
#SBATCH --time=3:30:00 | |||
# | |||
# Number of CPUs allocated to each task. | |||
#SBATCH --cpus-per-task=1 | |||
# | |||
# Mimimum memory required per allocated CPU in MegaBytes. | |||
#SBATCH --mem-per-cpu=1000 | |||
# | |||
# Send mail to the email address when the job fails | |||
#SBATCH --mail-type=FAIL | |||
#SBATCH --mail-user=YOUR_EMAIL_ADDRESS | |||
#Set your environment here | |||
export PATH="`cat path`:$PATH" | |||
module load Singularity | |||
# execute python code | |||
CLIENT=$1 | |||
TOKEN=$2 | |||
singularity exec -B . dtn_image_latest.sif python generate_data.py $CLIENT /datasets/ $PWD/../TEST_TRANSFERS/ -l 01 04 06 12 -t $TOKEN -r /perftest/uab_rc/ -wc | |||
[ ! -d "./data" ] && mkdir ./data | |||
mv ./*.csv ./data/ | |||
</pre> | |||
=== Bash Script to Run cronjob.sh Every 4 Hours Every Day === | |||
<pre> | |||
#!/bin/bash | #!/bin/bash | ||
Line 112: | Line 148: | ||
# email address to request notifications when the job is complete or if it fails | # email address to request notifications when the job is complete or if it fails | ||
#SBATCH --mail-type=FAIL | #SBATCH --mail-type=FAIL | ||
#SBATCH --mail-user=$ | #SBATCH --mail-user=$USER@uab.edu | ||
module load Singularity | |||
singularity pull docker://mmoo97/dtn_image:latest | |||
# Build crontab | |||
sbatch_dir=$(which sbatch) | |||
echo "#!/usr/bin/bash | |||
MAILTO=$USER@uab.edu | |||
# runs cronjob.sh every 4 hours every day | |||
00 */4 * * * cd $USER_DATA/DTN_tests && $sbatch_dir $USER_DATA/DTN_tests/cronjob.sh $CLIENT $TOKEN" > dtn-crontab | |||
echo $PATH > path | |||
<pre> | </pre> | ||
</pre> | </pre> | ||
The first line in the cron configuration file (crontab file) is the shebang. When this file is executed, if the file content beings with #!, the kernel executes the file specified on the #! line and passes the original file as an argument. Essentially, the shebang tells the terminal which program to use to run your scripts if your script is an executable file. | The first line in the cron configuration file (crontab file) is the shebang. When this file is executed, if the file content beings with #!, the kernel executes the file specified on the #! line and passes the original file as an argument. Essentially, the shebang tells the terminal which program to use to run your scripts if your script is an executable file. | ||
<pre> | <pre> | ||
#!/usr/bin/env | #!/usr/bin/env | ||
</pre> | </pre> |
Revision as of 13:55, 16 March 2021
Cron
What Is Cron?
Cron is a unix time based job scheduler tool used to schedule command execution at a specified time interval. These jobs are referred to as cronjobs, and are a great way of automating tasks or scripts so that they can be executed at a specific time.
Overview
A crontab file houses instructions to the cron daemon of the basic form: "run this command at this time on this date". Each user can have their own crontab file.
Crontab Syntax
crontab [ -u user ] file crontab [ -u user ] { -l | -r | -e } crontab [ -u user ] [ -i ] { -e | -l | -r } crontab [ -u user ] [ -l | -r | -e ] [-i] [-s]
Cron Expression Table
Cron actions are driven by a crontab file, also known as a "cron table". The user's crontab file is a configuration file that specifies shell commands to run at a given schedule.
Every crontab file consists of two parts: a schedule and a command. Here is a look into the scheduling syntax:
# ┌───────────── minute (0 - 59) # │ ┌───────────── hour (0 - 23) # │ │ ┌───────────── day of the month (1 - 31) # │ │ │ ┌───────────── month (1 - 12) # │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday; # │ │ │ │ │ 7 is also Sunday on some systems) # │ │ │ │ │ # │ │ │ │ │ # * * * * * <command to execute>
A crontab file has five fields; each field is represented by an asterisk to determine the data and time of a certain task.
Crontab Characters
Asterisk (*) - defines all the scheduling parameters.
Comma (,) - maintains two or more execution times of a single command.
Hyphen (-) - determines the range of time when setting several execution times of a single command.
Slash (/) - creates predetermined intervals of time in a specific range.
Last (L) - determines the last day of the week given in. a month. Example: 4L means the last Thursday.
Weekday (W) - determines the day of the week, followed by a number ranging from 1 to 5. Example: 1#2 means the second Monday
Question mark (?) - to leave blank
Crontab Options
To install, update, or edit a job in crontab, use the -e option.
$ crontab -e
To list crontab entires, use the -l option
$ crontab -l
To remove ALL jobs from crontab, use the -r option
$ crontab -r
To remove confirm removing a job from crontab, use the -i option
$ crontab -i -r
To add SELINUX security to a crontab file,
$ crontab -s
To edit another user's crontab file, use the user -u option and specify the username
$ crontab -u username -e
To list other user crontab entries
$ crontab -u username -l
NOTE: By default, cron uses vim to edit the crontab file. If you're not familiar with Vi/Vim, use the following command in Cheaha to go through a brief tutorial:
$ vimtutor
Examples
Bash Script (cronjob.sh) To Build Environment (via Singularity) & Run Python Script
#!/bin/bash # #SBATCH --job-name=dtn-cronjob # # Number of tasks needed for this job. Generally, used with MPI jobs #SBATCH --ntasks=1 #SBATCH --partition=short # # Time format = HH:MM:SS, DD-HH:MM:SS #SBATCH --time=3:30:00 # # Number of CPUs allocated to each task. #SBATCH --cpus-per-task=1 # # Mimimum memory required per allocated CPU in MegaBytes. #SBATCH --mem-per-cpu=1000 # # Send mail to the email address when the job fails #SBATCH --mail-type=FAIL #SBATCH --mail-user=YOUR_EMAIL_ADDRESS #Set your environment here export PATH="`cat path`:$PATH" module load Singularity # execute python code CLIENT=$1 TOKEN=$2 singularity exec -B . dtn_image_latest.sif python generate_data.py $CLIENT /datasets/ $PWD/../TEST_TRANSFERS/ -l 01 04 06 12 -t $TOKEN -r /perftest/uab_rc/ -wc [ ! -d "./data" ] && mkdir ./data mv ./*.csv ./data/
Bash Script to Run cronjob.sh Every 4 Hours Every Day
#!/bin/bash # resources #SBATCH cpus-per-task=1 #SBATCH mem-per-cpu=4G #SBATCH array=-1%1 #SBATCH partition=express # job name, error and output files #SBATCH --job-name=cron-job #SBATCH error=err_%j_4a.log #SBATCH output=out_%j_%4a.log #SBATCH ntasks=1 # email address to request notifications when the job is complete or if it fails #SBATCH --mail-type=FAIL #SBATCH --mail-user=$USER@uab.edu module load Singularity singularity pull docker://mmoo97/dtn_image:latest # Build crontab sbatch_dir=$(which sbatch) echo "#!/usr/bin/bash MAILTO=$USER@uab.edu # runs cronjob.sh every 4 hours every day 00 */4 * * * cd $USER_DATA/DTN_tests && $sbatch_dir $USER_DATA/DTN_tests/cronjob.sh $CLIENT $TOKEN" > dtn-crontab echo $PATH > path
The first line in the cron configuration file (crontab file) is the shebang. When this file is executed, if the file content beings with #!, the kernel executes the file specified on the #! line and passes the original file as an argument. Essentially, the shebang tells the terminal which program to use to run your scripts if your script is an executable file.
#!/usr/bin/env