Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux_wiki:cron [2017/09/03 16:46] billdozor [Files That Control Crontab Access] |
linux_wiki:cron [2019/05/25 23:50] (current) |
||
---|---|---|---|
Line 3: | Line 3: | ||
**General Information** | **General Information** | ||
- | Automating tasks with Cron. | + | Automating tasks with cron (the daemon that executes scheduled commands). |
**Checklist** | **Checklist** | ||
Line 12: | Line 12: | ||
====== User Crontabs ====== | ====== User Crontabs ====== | ||
+ | Individual users can create/edit their own cron jobs. | ||
+ | |||
+ | \\ | ||
List your user's crontab jobs | List your user's crontab jobs | ||
<code bash> | <code bash> | ||
Line 17: | Line 20: | ||
</ | </ | ||
+ | \\ | ||
Edit your crontab | Edit your crontab | ||
<code bash> | <code bash> | ||
crontab -e | crontab -e | ||
</ | </ | ||
+ | |||
+ | \\ | ||
+ | User crontabs are stored at: | ||
+ | * / | ||
===== Files That Control Crontab Access ===== | ===== Files That Control Crontab Access ===== | ||
Line 43: | Line 51: | ||
For any below, asterisk means all values. | For any below, asterisk means all values. | ||
<code bash> | <code bash> | ||
- | # m = minute (0-59) | + | # .---------------- |
- | # h = hour (0-23) | + | # | .------------- |
- | # dom = day of month(1-31) | + | # | | .---------- |
- | # mon = month (1-12) | + | # | | | .------- |
- | # dow = day of week (0-7, 0 or 7 is Sunday) | + | # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun, |
- | # cmd = command (command | + | # | | | | | |
- | + | # * * * * * | |
- | # m h dom mon dow cmd | + | |
</ | </ | ||
---- | ---- | ||
- | ====== Examples | + | ===== Crontab |
Executes script.sh at 0600, | Executes script.sh at 0600, | ||
Line 76: | Line 83: | ||
@reboot / | @reboot / | ||
</ | </ | ||
- | |||
- | ===== Other Cron keywords ===== | ||
- | |||
- | * @reboot - Run once at start up. | ||
- | * @yearly - Run once a year. | ||
- | * @annually - Same as yearly. | ||
- | * @monthly - Run once a month. | ||
- | * @weekly - Run once a week. | ||
- | * @daily - Run once a day. | ||
- | * @midnight - Same as daily. | ||
- | * @hourly - Run once an hour. | ||
---- | ---- | ||
Line 103: | Line 99: | ||
It is recommended to drop scripts into one of the /etc/cron.* directories instead of editing the system wide crontab file. | It is recommended to drop scripts into one of the /etc/cron.* directories instead of editing the system wide crontab file. | ||
- | All formats are bash scripts, except for the / | + | All formats are bash scripts, except for the / |
For example, / | For example, / | ||
<code bash> | <code bash> | ||
+ | # .---------------- minute (0 - 59) | ||
+ | # | .------------- hour (0 - 23) | ||
+ | # | | .---------- day of month (1 - 31) | ||
+ | # | | | .------- month (1 - 12) OR jan, | ||
+ | # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun, | ||
+ | # | | | | | | ||
+ | # * * * * * user-name | ||
+ | |||
# Rsync the crashplan backups to another usb drive for redundancy | # Rsync the crashplan backups to another usb drive for redundancy | ||
0 2,14 * * * root / | 0 2,14 * * * root / | ||
</ | </ | ||
The above executes at 0200 and 1400, runs as the user root, the script specified. | The above executes at 0200 and 1400, runs as the user root, the script specified. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====== Cron Keywords ====== | ||
+ | |||
+ | Keywords that can be used in place of a specific time/date schedule. | ||
+ | |||
+ | * @reboot - Run once at start up. | ||
+ | * @yearly - Run once a year. | ||
+ | * @annually - Same as yearly. | ||
+ | * @monthly - Run once a month. | ||
+ | * @weekly - Run once a week. | ||
+ | * @daily - Run once a day. | ||
+ | * @midnight - Same as daily. | ||
+ | * @hourly - Run once an hour. | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====== Cron - Relative Days ====== | ||
+ | |||
+ | Cron is great at being specific about minutes, hours, dates, months, and days of the week, but is not able to handle relative days. | ||
+ | * Relative days could come in handy when you need a job to execute on something such as the 1st, 2nd and 3rd Tuesday of every month. | ||
+ | * In order to accomplish this, a combination of cron and a date checker script is used. | ||
+ | |||
+ | ===== Automation Example ===== | ||
+ | |||
+ | In this example, we want a script to execute on the 1st, 2nd, and 3rd Tuesday of every month, with different arguments depending upon which Tuesday it is. | ||
+ | |||
+ | * Cron entry: Execute a date checker script every Tuesday | ||
+ | * Create the system wide cron entry (/ | ||
+ | # | .------------- hour (0 - 23) | ||
+ | # | | .---------- day of month (1 - 31) | ||
+ | # | | | .------- month (1 - 12) OR jan, | ||
+ | # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun, | ||
+ | # | | | | | | ||
+ | # * * * * * user-name | ||
+ | |||
+ | #Every Tuesday at 0800: Determine if an automated job should be run | ||
+ | #-Target: 1st,2nd,3rd Tues of month | ||
+ | 00 08 * * tue root / | ||
+ | </ | ||
+ | |||
+ | * Date checker script: Determine if the actual automated program should run and what arguments to send it. | ||
+ | * Create the date checker script (/ | ||
+ | # Title: automated-job-check.sh | ||
+ | # Description: | ||
+ | |||
+ | # Script to execute: See 'if statement' | ||
+ | script="/ | ||
+ | |||
+ | # Log file | ||
+ | log_file="/ | ||
+ | |||
+ | echo "==== Log Started: $(date) ====" >> ${log_file} | ||
+ | |||
+ | # If today is Tuesday AND today is >=1 and < | ||
+ | if [[ " | ||
+ | |||
+ | # First Tue: Development Environment | ||
+ | if [[ $(date +%-d) -le 7 ]]; then | ||
+ | echo ">> | ||
+ | ${script} --group all_dev 2>&1 >> ${log_file} | ||
+ | |||
+ | # Second Tue: Test Environment | ||
+ | elif [[ $(date +%-d) -le 14 ]]; then | ||
+ | echo ">> | ||
+ | ${script} --group all_test 2>&1 >> ${log_file} | ||
+ | |||
+ | # Third Tue: Production Environment | ||
+ | elif [[ $(date +%-d) -le 21 ]]; then | ||
+ | echo ">> | ||
+ | ${script} --group all_prod 2>&1 >> ${log_file} | ||
+ | |||
+ | else | ||
+ | echo ">> | ||
+ | fi | ||
+ | else | ||
+ | echo ">> | ||
+ | fi | ||
+ | |||
+ | echo -e "==== Log Ended: $(date) ====\n" | ||
+ | </ | ||
+ | |||
+ | ==== Other Date Check Examples ==== | ||
+ | |||
+ | A few other examples of date checker scripts with relative days before/ | ||
+ | |||
+ | \\ | ||
+ | **7 Days before the first Tuesday of the month**< | ||
+ | # Title: automated-job-check.sh | ||
+ | # Description: | ||
+ | |||
+ | # Script to execute: | ||
+ | script="/ | ||
+ | |||
+ | # Log file | ||
+ | log_file="/ | ||
+ | |||
+ | echo "==== Log Started: $(date) ====" >> ${log_file} | ||
+ | |||
+ | # If today is Tuesday AND 7 days from now is >=1 and < | ||
+ | if [[ " | ||
+ | if [[ $(date +%-d -d "+7 days") -le 7 ]]; then | ||
+ | echo ">> | ||
+ | ${script} 2>&1 >> ${log_file} | ||
+ | else | ||
+ | echo ">> | ||
+ | fi | ||
+ | else | ||
+ | echo ">> | ||
+ | fi | ||
+ | |||
+ | echo -e "==== Log Ended: $(date) ====\n" | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | **2 Days after the third Tuesday of the month**< | ||
+ | # Title: automated-job-check.sh | ||
+ | # Description: | ||
+ | |||
+ | # Script to execute | ||
+ | script="/ | ||
+ | |||
+ | # Log file | ||
+ | log_file="/ | ||
+ | |||
+ | echo "==== Log Started: $(date) ====" >> ${log_file} | ||
+ | |||
+ | # If today is Thursday AND two days ago was >=15 and < | ||
+ | if [[ " | ||
+ | if [[ $(date +%-d -d "-2 days") -le 21 ]]; then | ||
+ | echo ">> | ||
+ | ${script} 2>&1 >> ${log_file} | ||
+ | else | ||
+ | echo ">> | ||
+ | fi | ||
+ | else | ||
+ | echo ">> | ||
+ | fi | ||
+ | |||
+ | echo -e "==== Log Ended: $(date) ====\n" | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ |