It’s been a long time since my last post. I’ve been quite busy, but i still want to run these pages so here am i.
First thing first, you don’t want to run a job as root (vi /etc/crontab , unless you do exactly what you are doing of course). So all the following instruction are done under my user.
Let’s see what’s on the definition file “/etc/crontab”
[lolo@dellxps ~]$ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
See, it already tell you everything you need to know. Let’s take a look to an example. i have created a script(~/scripts/notif.sh) that will display a notification on my Gnome desktop on Fedora:
#!/bin/bash
#test bash to be launch with crontab or/and anacrontab
#don't forget chmod u+x notif.sh
notify-send "Hello World" -t 3000
Let now schedule a “funny” reminder every minute ! to edit cron table use the following syntax (to edit another user crontab use -u switch):
[lolo@dellxps ~]$ crontab -e
then add the following line
*/1 * * * * /home/lolo/bin/notif.sh
Now let set it every working day at 13h05 (1:05 pm) from January to June each year:
5 13 * 1,2,3,4,5,6 mon-fri /home/lolo/bin/notif.sh
For each value of the time table minute, hour, day of month, month, day of week you can use special character:
- use * (star) to specify all possible values of the range. ex: use * for day of month position to schedule the task each day of the month.
- use , (comma) to specify a list of value. ex: to schedule a job every 2 months, at month position set jan,mar,may,jul,sep,nov or 1,3,5,7,9
- use – (dash) to specify a range of value. ex: to schedule a task from monday to friday set day of week value as 1-5 or mon-fri
- use / [slash] to specify a recurrence within the unit of time. ex: use * */1 * * * to schedule an event every hour from 00:00 to 24:00
To review the list of tasks scheduled for your current user:
[lolo@dellxps ~]$ crontab -l
To remove/delete all entries:
[lolo@dellxps ~]$ crontab -r
You may also need to use the shortcuts or aliases instead of this long and coding stuff…for instance:
- @reboot: Run after each time the machine is started.
- @yearly or @annually: Scheduled once a year, same as “0 0 1 1 *”.
- @monthly: Run once a month, same as “0 0 1 * *”.
- @weekly: Scheduled once a week, same as “0 0 * * 0”.
- @daily or @midnight: Scheduled once a day, same as “0 0 * * *”.
- @hourly: Scheduled every hour, same as “0 * * * *”.
You can check the cron tab log using the command:
[lolo@dellxps ~]$ tail /var/log/cron
!!! WARNING !!! crontab is used to launch task on a machine that run 24/7. If the the machine is shutdown at the time you specify the task to be executed, NOTHING WILL BE LAUNCH.
If you want to run a task on a laptop, or desktop that is regulary shutdown use anacrontab instead. It’s similar to crontab but will run the task at {starting time daemon anacron + delay}
[lolo@dellxps ~]$ cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
As usual for more detail don’t forget man pages for more help
- man crontab
- man anacrontab
Stay tune…