Cron
https://docs.rc.uab.edu/
Please use the new documentation url https://docs.rc.uab.edu/ for all Research Computing documentation needs.
As a result of this move, we have deprecated use of this wiki for documentation. We are providing read-only access to the content to facilitate migration of bookmarks and to serve as an historical record. All content updates should be made at the new documentation site. The original wiki will not receive further updates.
Thank you,
The Research Computing Team
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