http://qs321.pair.com?node_id=125967


in reply to a cron; in perl

=pod =head1 NAME cron - daemon to execute scheduled commands (Belga Cron) =head1 SYNOPSIS cron [B<-F> F<file>] [B<-L> I<log>] [B<-M>] [B<-O>] [B<-S>] [B<-U>] [B +<-X>] [B<-f> F<file>] [B<-h>] [B<-s>] [B<-x> [I<debugflag>]] =head1 DESCRIPTION Same as Vixie Cron blah blah blah. =head1 OPTIONS =over 4 =item B<-1> Exit after running through the list of jobs once. =item B<-F> F<crontab> Like B<-f> below except that it expects a user (6th) field. =item B<-L> I<log> Absolute path to write logs; files named errors, info, and warnings; i +n. There are two special values you can set B<-L> to =over 4 =item 0 no logging is done =item - output is sent to STDOUT =back =item B<-M> Repress all sending of mail. =item B<-O> To process a job B<cron> forks and then the specified command. With B<-O> commands denoted by C<#!perl -e> are C<eval>d by the child, saving the overhead of invoking a new interpreter when running perl sc +ripts; such jobs are ignored if B<-O> is not supplied. Even though this has been designed to be as safe as possible be sure you understand the potential security implications. =item B<-S> =cut XXX =pod Prevents magic open and rumored implict C<fork>, forces B<-U>. =item B<-U> This prevents setUID and setGID, that is it effectively ignores the GID environment variable as well as the user (6th) field of crontabs run as root or with B<-F>. =item B<-X> Prevents B<cron> from daemonizing; forces B<-s> and does not seperate from the terminal. =item B<-f> F<crontab> Supply a specific crontab or directory of crontabs to parse; ignoring the system default and spool directories. Especially useful for debugging or running multiple daemons. You might want to consider using B<-L> as well. =item B<-h> Print short usage message, and exit. =item B<-s> This prevents forking which forces B<cron> to serialize job processing +. This can produce unexpected results if you are setUIDing; running jobs via B<-F> or from F</etc/crontab> or F</etc/cron.d>. =item B<-x> [I<debugflag>] Log debugging information. =over 4 =item 1 basic status messages =item 2 crontab parsing messages =item 4 job checking messages =item 8 job output =back You may add the values together to form a composite mode. =back =head1 DIAGNOSTICS =over 4 =item Can't read from NULL device: AAA Couldn't open STDIN from your NULL device e.g; /dev/null. This is a common procedure for daemons. Don't you have a NULL? =item Couldn't chdir to ROOT directory: AAA Couldn't change to ROOT directory. This is a common procedure for daemons. Don't you have a root? =item Couldn't fork: AAA B<Cron> needs to C<fork> in order to handle all the SetUIDing it does for security. It tries to catch perls which cannot C<fork> and C<die>s, though a B<-X> will prevent this test. You may also get this error if your process table is full or there is insufficient memory to create a child to execute a job. The job was skipped. =item Couldn't open AAA: BBB B<Cron> was unable to open crontab AAA. =item Couldn't create pipe: AAA B<Cron> was unable to create a pipe which is necessary for embeded-newlines (%). The job was skipped. =item Couldn't setregid(AAA, BBB): CCC A child was unable to change from group ID(s) AAA to effective group ID(s) BBB before executing a job and exited. The job was skipped. =item Couldn't setreuid(AAA, BBB): CCC A child was unable to change from user ID AAA to effective user ID BBB before executing a job and exited. The job was skipped. =item Embedded newlines (%) not allowed with -s =back =head1 ENVIRONMENT B<Cron> uses nothing save PATH from it's environment. However crontabs may contain environment variable settings for jobs. See L<crontab(5)>. =over 4 =item CRON* These are a generalization of CRONLOG. They map to options and allow one to system-wide defaults in F</etc/defaults/cron>; =item CRONLOG Adopted from Sun's Cron which allows you to control logging with this setting in a crontab. This defaults to F</var/log/cron/>; and is equivalent to B<-L> I<log>. =item CRONDAEMON This defaults to YES; NO is equivalent to B<-X>. =item CRONDEBUG This defaults to NO; YES is equivalent to B<-x>. =item CRONEMBED This defaults to NO; YES is equivalent to B<-O>. =item CRONMAIL This defaults to YES; NO is equivalent to B<-M>. =item CRONONCE This defaults to NO; YES is equivalent to B<-1>. =item CRONSERIAL This defaults to NO; YES is equivalent to B<-s>. =item CRONUNSAFE This defaults to NO; YES is equivalent to B<-S>. =item GID Specify the groups the job process will be a member of; this is a colon delimited list like PATH. =item SUPATH Another extension from Sun's Cron. If SUPATH is set it is used in lieu of PATH for jobs run as root. =back =head1 FILES =over 4 =item F</etc/crontab> =item F</etc/cron.d/> =item F</var/spool/cron> OR F</var/spool/cron/crontabs> (Solaris) These are the default crontabs that list the jobs B<cron> is supposed +to run. See B<-f>. =item F</etc/default/cron> Adopted from Sun's Cron. System wide default settings, environment and options. NOTE: This file is only read at startup and not monitored for changes. =item F</var/log/cron/info> =item F</var/log/cron/warnings> =item F</var/log/cron/errors> B<Cron> logs its various messages to these files. See B<-L>. =back =head1 BUGS The crontab parser ought to be validating, and bail if it encounters something that doesn't look like a crontab. For now using crontab(1) is recommended, as it validates and will catch any errors avoiding nas +tiness. =head1 RESTRICTIONS Embedded newlines (%) in jobs require that your B<perl> implements C<p +ipe>. For hopefully obvious reasons; *cough* hashes *cough*; I<%> are not considered newlines for embedded perl jobs. Embedded perl (B<-O>) with B<-S> requires that you have File::Temp ins +talled. =head1 NOTES An interesting way to track jobs with GNU ps and grep is: ps aux -H | grep -A 2 -i crond =head1 SEE ALSO cron(8), crontab(1), crontab(5) =cut XXX run-parts =pod =head1 AUTHOR Jerrad Pierce <jpierce@cpan.org> =head1 HISTORY In case you hadn't noticed this is loosely modeled after Vixie Cron. You ought to be able to find that at F<ftp://ftp.vix.com/pub/vixie/> =head1 EXTENSIONS Almost every feature of Belga Cron is an extension of the original B<c +ron>. Most of them are specific to Belga Cron though some are derived from Sun's implementation and are denoted as such. In addition all extensions in Vixie Cron as of 3.0 are supported, except use of !, namely =over 4 =item lists and ranges can co-exist in the same field =item 3 letter abbreviations of English names for months and days may be use +d =item job output is mailed (or not) to a specified user =back =cut