The FreeBSD 'zine
March 2000 : Crontab

Using Crontab
by Eric De La Cruz Lugo<[email protected]>

Ack! It's 5:00 PM! You have a date with someone very important at 5:15 PM, but you have several things to do: send email to 20 people (telling them the same thing (Your cat had kittens!!)), transfer files from nine FTP sites, check when and where a user is connecting to your system, make a backup and compile that new device support into your machine's kernel and if that wasn't enough, your provider sends you an email telling you that the connection will end in 45 minutes and will be back on line at 8:30 PM for a checking routine in their servers! Now what do you do?

If you were a Windows user, then you would have to give up and wait until the next day, because after your date you'll probably want some sleep before connecting to the net again (after all you are only human, aren't you?).

But you are not a Windows user, you are a FreeBSD user and that single fact makes you capable of doing things that a mere mortal (read Windows/DOS User) can't do.

In FreeBSD (and in other UNIX-like OS's as well) a cool command exists that lets you run instructions (like a shell script) at any given time. The name of this command is crontab.

First we will explain what it is and how it works:

As the FreeBSD man page for crontab (crontab(5)) states, cron is "a daemon that executes scheduled commands".

"Cron searches /var/cron/tabs for crontab files which are named after accounts in /etc/passwd; crontabs found are loaded into memory. Cron also searches for /etc/crontab which is in a different format. Cron then wakes up every minute, examining all stored crontabs, checking each command to see if it should be run in the current minute. When executing commands, any output is mailed to the owner of the crontab (or to the user named in the MAILTO environment variable in the crontab, if such exists)".

Here is where it all begins. The key to the solution is the crontab file. This file has a special format, as we will see later.

A crontab file contains instructions to the cron daemon of the general form: "run this command at this time on this date". Each user, as we saw before, has their own crontab. Commands in any given crontab will be executed as the user who owns that crontab file.

To allow for increased security of the system, there are some restrictions when using the crontab command. If the /var/cron/allow file exists, then you must be listed there in order to be allowed to use this command. If the allow file does not exist, but the /var/cron/deny file does, then you must not be listed in that file in order to use this command. If neither of these files exists then, depending on the site configuration parameters, only the super user will be allowed to use this command, or all users will be able to use this.

In this case we assume that all users in your system are able to use the crontab command.

The format of this file is shown below. Each line has five time and date fields, the time and date fields are:

	field		allowed values
	-----		--------------
	minute		0-59
	hour		0-23
	day of month	1-31
	month		1-12 (or names, see below)
	day of week	0-7 (0 or 7 is Sun (Sunday), or use names)

A field may be an asterisk (*), which always stands for "first-last".

A crontab file example is given below, the # character is taken as a comment:

	# run a shell script named "daily.job" one minute after midnight,
	# every day -- output mailed to eric
	1 0 * * *	$HOME/bin/daily.job 
	# run another shell script named monthly at 1:25PM on the first of
	# every month -- output mailed to eric
	25 13 1 * *	$HOME/bin/monthly
	# run at 10 PM on Monday, send email to my friends
	0 22 * * 1	$HOME/bin/mail.to.friends
	# Check at 9:05 AM every Monday what users are logged in the 
	# "itesocci.gdl.iteso.mx" machine, output mailed to eric.
	5 9 * * mon	finger @itesocci.gdl.iteso.mx 
	# Make a FTP session at 11:30 PM following the commands stored in the
	# "mp3" file keep in sync every day.
	30 23 * * * ftp -n -v < /home/maestros/ar/eric/bin/mp3

In the FTP session as shown above, the file "mp3" contains ftp commands:

	open 138.232.8.4  
	user ptagh share
	lcd /home/maestros/ar/eric/mp3
	hash
	bin
	prompt
	cd unsorted  
	mget "*.mp3"
	bye

As you can see the username and password are readable, that�s why this "mp3" file must be readable only by the owner (use the appropriate parameters with the chmod command (check the manual: man chmod)).

	% chmod 600 mp3

The command above makes the file "mp3" readable and writeable only for the owner.

In the email section shown above, we have a shell script named "mail.to.friends", this shell script is shown below:

     #!/bin/sh
     mail -s "My cat had kittens!" [email protected], 
     [email protected], [email protected], [email protected] < cats

In order to run this script from our crontab file we need to make it executable, we do this typing something like:

	% chmod a+x mail.to.friends

Now that we know how the cron daemon and the crontab command work, we can create a crontab file; in this case we'll use "eric" (in your case, use your account name or anything else you want). Using your favorite editor (vi, pico, joe, emacs...etc), we put the example file shown above (of course we assume that you can make your own changes on this file in order to do what you really want), and after that, simply type:

	% crontab eric

And that's it! Now the cron daemon will check every minute for the time it will execute the commands, and the output will be mailed to (in this case) the user "eric".

If you want to stop a crontab just type:

	% crontab -r

I hope this article helps those who want to obtain all they can from an OS like FreeBSD and other UNIX-like systems.

After all, automation is supposed to be one of the best features of a serious OS, isn't it?

More references.

I strongly suggest that you read the manual pages for cron and crontab. You should also check:

Have a good time "croning"! ;-)

- Eric


About the Author

Eric De La Cruz Lugo, works for the "CONSTRUCTORA KEPLER S.A. DE C.V." a Construction company in Mexico. Right now he is working on a project in Merida, Yucatan, building a Power Plant. He is a loyal FreeBSD user and admin since 1993 at ITESO University (Guadalajara, Jalisco, Mexico). He can be reached at [email protected] or [email protected].

Current Issue
. Issue #06 : July 2000

Old Issues
. Issue #01 : February 2000
. Issue #02 : March 2000
. Issue #03 : April 2000
. Issue #04 : May 2000
. Issue #05 : June 2000

Quick Links
. Table of Contents
. Mailing Lists
. FreeBSD Events
. User Group Calendar
. Site Statistics
. Old Articles
. Latest News
. Press Releases
. Contribute
. Send us Feedback
. Other Resources
. Submit an Article
. Submit an Event

Today's Fortune
Weinberg's Second Law: If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.

FreeBSD 'zine Poll
Are you going to BSDCon?
Yes.
No.
Maybe.
What the hell is BSDCon?
Results More polls

Sponsors
. VicFUG

Download
. Issue #01 : Download
. Issue #02 : Download
. Issue #03 : Download
. Issue #04 : Download
. Issue #05 : Download
. Issue #06 : Download

Search

Runs on FreeBSD

Add Channel to My Netscape

DaemonNews

Contact: <[email protected]>
This site and the tarballs are built every 6 hours.
Copyright � 1998-2000, The FreeBSD 'zine
Code revision: 07/24/2000��All rights reserved.