Welcome back to another round of nerd. Have you ever wanted to learn about cronjobs? Then you’ve come to the right place for a basic overview.
Wikipedia – “cron is a time-based job scheduler in Unix-like computer operating systems. cron enables users to schedule jobs (commands or shell scripts) to run periodically at certain times or dates. It is commonly used to automate system maintenance or administration.“
So where was I? Oh yeah, cronjobs.
Read the man pages.
Man pages: cron(8) crontab(5) crontab(1)
$ man 8 cron $ man 5 crontab $ man crontab
List your crontab
$ crontab -l
List a users crontab
$ crontab -l -u
$ sudo crontab -l -u root
Remove your crontab(s)
$ crontab -r
* * * * * command to be executed
– – – – –
| | | | |
| | | | —– Day of week (0 – 7) (Sunday=0 or 7)
| | | ——- Month (1 – 12)
| | ——— Day of month (1 – 31)
| ———– Hour (0 – 23)
————- Minute (0 – 59)
Edit your personal crontab:
$ crontab -e
Edit another users crontab
$ sudo crontab -e -u
$ sudo crontab -e -u root
Note: Use root when you want to run a command that involves sudo.
Now that we know where to add a cronjob, lets learn the format. Nothing is better than just showing you the exact commands.
Runs at startup
Runs every 5 minutes
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /path_to_script_or_command
*/5 * * * * /path_to_script_or_command
Runs every hour
0 * * * * /path_to_script_or_command
Runs every day (at midnight)
0 0 * * * /path_to_script_or_command
Runs every week
0 0 * * 0 /path_to_script_or_command
Runs every month
0 0 1 * * /path_to_script_or_command
Runs every year/annually
0 0 1 1 * /path_to_script_or_command
But Tommy, I wish there was just a simple generator where I can plug in exactly what I want and get those numbers generated for me automatically. Well, you’re in luck.
My real world example
If you read my “Mac Terminal Loading Slow” post, you’ll notice that you’d need to clear the logs every week/month or so. I wanted to automate this task. I couldn’t place the sudo rm -f /private/var/log/asl/*.asl command in my .bash_* due to sudo. Actually, I could have, but I didn’t want to enter my password every time it ran (who would want to do that?). So I decided to add the command directly into a cronjob and run it every week. Also, since it’s a sudo command, I am adding it to the user root‘s crontab.
$ sudo crontab -e -u root 0 0 * * 0 rm -f /private/var/log/asl/*.asl
Note: I no longer have to use sudo because root has an all access pass to do everything it wants.
You should understand the basics of how to create a cronjob. Now get out there and automate something and make your life that much easier. Remember, never work hard, work smart.