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:51] billdozor |
linux_wiki:cron [2019/05/25 23:50] (current) |
||
---|---|---|---|
Line 14: | Line 14: | ||
Individual users can create/edit their own cron jobs. | 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 19: | 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 45: | 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 | + | |
</ | </ | ||
Line 94: | 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 / | ||
Line 105: | Line 118: | ||
---- | ---- | ||
- | ====== Cron keywords | + | ====== Cron Keywords |
Keywords that can be used in place of a specific time/date schedule. | Keywords that can be used in place of a specific time/date schedule. | ||
Line 117: | Line 130: | ||
* @midnight - Same as daily. | * @midnight - Same as daily. | ||
* @hourly - Run once an hour. | * @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" | ||
+ | </ | ||
---- | ---- | ||