Index of /system-doc/dcron-2.3.3
Name Last modified Size Description
Parent Directory 29-Apr-2007 09:01 -
CHANGES 16-Feb-1998 20:32 2k
dcron-2.3.3.lsm 16-Feb-1998 20:32 1k
CREDITS
I finally got tired of all of these wild cron programs that take the
task of running timed jobs to ridiculous extremes in terms of
capabilities and unnecessary features. So here is my entry: a
crond/crontab combination that is simple and elegant, and hopefully
secure to boot. This cron implements reasonable features in terms
of field specification in the crontab and allows individual user
crontabs.
This program is written entirely from scratch by yours Truely (sig
at bottom).
All jobs are run with /bin/sh for conformity and portability, thereby
avoiding the mess that occurs with other cron's that try to use the
user's perfered shell, which breaks down for special users and even makes
some of us normal users unhappy (for example, /bin/csh does not use a true
O_APPEND mode and has difficulty redirecting stdout and stderr both to
different places!). You can, of course, run shell scripts in whatever
language you like by making them executable with #!/bin/csh or whatever
as the first line. If you don't like the extra processes, just 'exec'
them.
Under the same reasoning, this cron does not allow you to specify
environment variables or other stuff better left specified as
arguments to a shell script. Talk about nonsense!
The programs were written with an eye towards security, hopefully I
haven't forgotton anything. The programs were also written with an
eye towards nice, clean, algorithmically sound code. It's small, and
the only fancy code is that which deals with child processes. I do
not try to optimize with vfork() since it causes headaches and is
rather pointless considering I'm execing a shell most of the time,
and I pay close attention to leaving descriptors open in the crond
and close attention to preventing crond from running away.
COMPILATION
This is an ANSI program, you must use a compiler that understands
prototypes, such as GCC. I will not accept bug reports related
to hacking the program to work with a non-ANSI compiler.
Note that the source code, especially in regard to changing the
effective user, is Linux specific (SysVish). I welcome any changes
in regard to making the mechanism work with other platforms.
(1) Edit the Makefile, adding -D overrides to defines in defs.h as
appropriate for your machine. (Or just edit defs.h, but as
people introduce fixes to make the program work on other
platforms, I want most overrides to be in the CFLAGS for the
Makefile).
(2) You may need to edit the #include lines in defs.h for your
machine. The goal is to include everything necessary such that
the program can be compiled in the most ansi-strict manner. Amoung
other things, prototypes for system functions must come from
external include files and NOT from defs.h or any source file.
If no prototype exists for a particular function, contact your
vendor to get an update for your includes.
(3) make
INSTALLATION
Permissions should be as outlined below. You will want to create a
special 'cron' group in which you put those users that are allowed
to use the crontab program.
-rwx------ 1 root wheel 24864 Apr 27 09:02 /usr/bin/crond*
-rwsr-x--- 1 root cron 24311 Apr 27 09:02 /usr/bin/crontab*
crond should be run automatically at system startup from /etc/rc.local
(or equivalent). It automatically detaches. A log level of 8 is
normally specified, and you normally append using /bin/sh's >>, allowing
the log file to backed up and cleared with an 'echo >/var/log/cron' in
your cron scripts.
/usr/bin/crond -l8 >>/var/log/cron 2>&1
The crontab files are normally located in /var/spool/cron/crontabs. The
directories normally have permissions:
drwxr-x--- 3 root wheel 1024 Feb 24 18:17 /var/spool/cron/
drwxr-x--- 2 root wheel 1024 May 1 10:28 /var/spool/cron/crontabs
TESTING
Use the crontab program to create a personal crontab with the following
two lines:
* * * * * date >>/tmp/test
* * * * * date
Check the log output of crond to ensure the cron entries are being
run once a minute, check /tmp/test to ensure the date is being
appended to it once a minute, and check your mail to ensure that crond
is mailing you the date from the other entry once a minute.
After you are through testing cron, delete the entries with crontab -e
or crontab -d
BUG REPORTS, SUBMISSIONS
Send any bug reports and source code changes to me, Matthew Dillon:
dillon@apollo.west.oic.com
Note carefully that I will not accept any local ANSI prototypes for
system calls that should properly be in an external include file,
that I will probably not accept additional features to the program,
and I will not accept any changes to make the source compile under
a non-ANSI compiler. I will not accept any radical code changes...
the purpose being that I want this cron to be made bug free rather
then feature full.
Changes to overridable defaults in defs.h should be made in the
Makefile, you may submit a Makefile for your platform. Changes
to the #include's in defs.h should be made by a combination of an
-D options in the Makefile and #ifdef's for that option in defs.h,
and not rely on pre-definitions made by the C compiler.
Changes to source code to accomodate one platform or other should
be made in the same manner.
Matthew Dillon dillon@apollo.west.oic.com
1005 Apollo Way
Incline Village, NV. 89451 ham: KC6LVW (no mail drop)
USA Sandel-Avery Engineering (702)831-8000
[always include a portion of the original email in any response!]