CSC128 : Introduction to UNIX
Using at and crontab
The at Utility
The at utility will allow you to run something 'at' some time.
>at [time] [enter] command CONTROL-DYou can also use AM or PM, midnight, noon, or teatime (4pm). Example:
>at 10:15AM mail -s 'hey sean, here it is' email@example.com < file CONTROL-D
Unlike crontab you can assume that at starts it's default paths at your home directory. Even still this can be tricky. Below is an at job that is correctly placing a listing in a sub-directory of mine:
ls -l ~/public_html/csc128/at/* >~/public_html/csc128/at/listing
Notice that it is ~/public_html (that is tilde slash public_html)
There are also related commands atrm which can be used to remove at jobs from the queue and atq which lists the jobs.
at jobs are placed in the queue by at job mumber for instance:
atq 22 2003-04-23 16:00 a 21 2003-04-23 16:00 a
To view what the contents of an at job is you use the command:
at -c 22and the shell returns
note how the shell returns the string (in this case ls -ila)that the at queued job will run at the appointed hour.
cron and crontab
A very common and famous method of running jobs is using cron. cron is the system cronometer. When you are making a cron job you are editing your crontab file. The file is located in different places on different systems. There is a system as well as individual users' crontab files.
To create a crontab file for yourself, simply type
1) 2) 3) 4) 5) 6) minute hour mday month wday command_to run 0-59 0-23 1-31 1-12 * any command -or- sun 1,4 first and 4th weekday tue wed (etc) In each of the first 5 fields, a star * is allowable which is a wildcard, matching all values for that field. NOTE: The 5th field's operation has changed and it does NOT appear to be working as explaned in the man page for crontab. It used to take a 0-7 which started and ended on a Sunday. Now they are showing that you can put in a wed or fri etc. I have not found this to work. For our purposes now just use a * in field five and it will work fine, but we are losing some of the fine grained control on what day of the week. I am still trying to figure out how/why our new 64 bit version of cron is not working as expected.
A crontab EntryBelow is a crontab entry that e-mails me a birthday message. Remember to make your entries so that they are on one line. To do that we use the J command in vi to join lines.
0 8 26 4 * /usr/bin/mail -s 'Happy Birthday Sean from cron' firstname.lastname@example.org </home/staff/smauney/personal/birthdays/seanThe other switches to use with the crontab command are -l which is list your current crontab entries and -d which is remove a users crontab file.
It is important to include full relative or absolute pathnames in cron commands, since the cronjob cannot be assumed to be working out of your home directory.
OutputBoth at and cron cannot write to stdout, since the assumption is that you are not logged in at the time, or are doing something else. By default both at and cron mail the output to you, you can rely on re-direction to capture a file with the output of the cron or at job.
When you open or create your crontab file for editing, by using the crontab -e command your crontab file is saved into a directory usually located in /var/cron or /var/spool/cron . Your administrator is in control of these files and directories and you cannot see them directly.