xref: /dflybsd-src/usr.sbin/cron/doc/MAIL (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
1*86d7f5d3SJohn Marino[ this is really old mail that came to me in response to my 1986 posting
2*86d7f5d3SJohn Marino  to usenet asking for feature suggestions before releasing the first
3*86d7f5d3SJohn Marino  version of cron.  it is presented here for its entertainment value.
4*86d7f5d3SJohn Marino  --vix ]
5*86d7f5d3SJohn Marino
6*86d7f5d3SJohn Marino$FreeBSD: src/usr.sbin/cron/doc/MAIL,v 1.4 1999/08/28 01:15:53 peter Exp $
7*86d7f5d3SJohn Marino$DragonFly: src/usr.sbin/cron/doc/MAIL,v 1.2 2003/06/17 04:29:53 dillon Exp $
8*86d7f5d3SJohn Marino
9*86d7f5d3SJohn MarinoFrom ptsfa!lll-crg!ames!acornrc!bob Wed Dec 31 10:07:08 1986
10*86d7f5d3SJohn MarinoDate: Wed, 31 Dec 86 08:59:31 pst
11*86d7f5d3SJohn MarinoFrom: lll-crg!ames!acornrc!bob (Bob Weissman)
12*86d7f5d3SJohn MarinoTo: ptsfa!vixie!paul
13*86d7f5d3SJohn MarinoStatus: RO
14*86d7f5d3SJohn Marino
15*86d7f5d3SJohn MarinoSure, here's a suggestion: I'd like to be able to run a program, say,
16*86d7f5d3SJohn Marinoevery two hours.  Current cron requires me to write
17*86d7f5d3SJohn Marino0,2,4,6,8,10,12,14,16,18,20,22 in the hours field.  How about a notation
18*86d7f5d3SJohn Marinoto handle this more elegantly?
19*86d7f5d3SJohn Marino
20*86d7f5d3SJohn Marino<<	Okay, I've allowed 0-22/2 as a means of handling this.
21*86d7f5d3SJohn Marino	The time specification for my cron is as follows:
22*86d7f5d3SJohn Marino		specification = range {"," range}
23*86d7f5d3SJohn Marino		range = (start "-" finish ["/" step]) | single-unit
24*86d7f5d3SJohn Marino	This allows "1,3,5-7", which the current cron doesn't (it won't
25*86d7f5d3SJohn Marino	do a range inside a list), and handles your specific need.	>>
26*86d7f5d3SJohn Marino
27*86d7f5d3SJohn MarinoFrom drw@mit-eddie Wed Dec 31 18:25:27 1986
28*86d7f5d3SJohn MarinoDate: Wed, 31 Dec 86 14:28:19 est
29*86d7f5d3SJohn MarinoFrom: drw@mit-eddie (Dale Worley)
30*86d7f5d3SJohn MarinoTo: mit-eddie!vixie!paul
31*86d7f5d3SJohn MarinoStatus: RO
32*86d7f5d3SJohn Marino
33*86d7f5d3SJohn MarinoWe have a lot of lines in our crontab of the form
34*86d7f5d3SJohn Marino
35*86d7f5d3SJohn Marino	00 12 * * * su user < /usr/users/user/script.file
36*86d7f5d3SJohn Marino
37*86d7f5d3SJohn MarinoThis barfs (silently!) on our system (Dec Ultrix 1.2 == 4.2bsd) if
38*86d7f5d3SJohn Marinouser's shell is csh.  This, I am told, is because csh requires that
39*86d7f5d3SJohn Marinothe environment be set up in certain ways, which cron doesn't do.
40*86d7f5d3SJohn Marino(Actually, I believe, it is because /etc/rc, which runs cron, doesn't
41*86d7f5d3SJohn Marinoset up the environment enough for csh to run, and cron just inherits
42*86d7f5d3SJohn Marinothe situation.)  Anyway, the point is that if you find out what csh
43*86d7f5d3SJohn Marinoreally needs in its environment, you might want to set up cron to
44*86d7f5d3SJohn Marinoprovide some reasonable defaults (if it isn't supplied by cron's
45*86d7f5d3SJohn Marinoparent).  Also, could you tell me what csh needs, if you find out, so
46*86d7f5d3SJohn Marinowe can hack our /etc/rc?
47*86d7f5d3SJohn Marino
48*86d7f5d3SJohn Marino<<	well, the environment IS a problem. processes that cron forks
49*86d7f5d3SJohn Marino	will inherit the environment of the person who ran the cron
50*86d7f5d3SJohn Marino	daemon... I plan to edit out such useless things as TERMCAP,
51*86d7f5d3SJohn Marino	TERM, and the like; supply correct values for HOME, USER, CWD,
52*86d7f5d3SJohn Marino	and whatever else comes to mind.  I'll make sure csh works...	>>
53*86d7f5d3SJohn MarinoFrom ptsfa!ames!seismo!dgis!generous Thu Jan  1 07:33:17 1987
54*86d7f5d3SJohn MarinoDate: Thu Jan 1 10:29:20 1987
55*86d7f5d3SJohn MarinoFrom: ames!seismo!dgis!generous (Curtis Generous)
56*86d7f5d3SJohn MarinoTo: nike!ptsfa!vixie!paul
57*86d7f5d3SJohn MarinoStatus: RO
58*86d7f5d3SJohn Marino
59*86d7f5d3SJohn MarinoPaul:
60*86d7f5d3SJohn Marino
61*86d7f5d3SJohn MarinoOne of the limitations of the present versions of cron is the lack
62*86d7f5d3SJohn Marinoof the capability of specifying a way to execute a command every
63*86d7f5d3SJohn Marinon units of time.
64*86d7f5d3SJohn Marino
65*86d7f5d3SJohn MarinoHere is a good example:
66*86d7f5d3SJohn Marino
67*86d7f5d3SJohn Marino# Present method to start up uucico
68*86d7f5d3SJohn Marino02,12,22,32,42,52 * * * * 	exec /usr/lib/uucp/uucico -r1
69*86d7f5d3SJohn Marino
70*86d7f5d3SJohn Marino# New method ?? (the ':' here is just one possibility for syntax)
71*86d7f5d3SJohn Marino02:10 * * * *			exec /usr/lib/uucp/uucico -r1
72*86d7f5d3SJohn Marino
73*86d7f5d3SJohn MarinoThis method would prove very helpful for those programs that get started
74*86d7f5d3SJohn Marinoevery few minutes, making the entry long and not easily readable.  The first
75*86d7f5d3SJohn Marinonumber would specify the base time, and the second number the repetition
76*86d7f5d3SJohn Marinointerval.
77*86d7f5d3SJohn Marino
78*86d7f5d3SJohn Marino<<	Good idea, but bob@acornrc beat you to it.  I used '/' instead of
79*86d7f5d3SJohn Marino	':'.  This is my personal preference, and seems intuitive when you
80*86d7f5d3SJohn Marino	think of the divide operator in C... Does anyone have a preference? >>
81*86d7f5d3SJohn Marino
82*86d7f5d3SJohn MarinoFrom ptsfa!lll-lcc!seismo!decuac!c3pe!c3engr!charles Thu Jan  1 17:04:24 1987
83*86d7f5d3SJohn MarinoFrom: lll-lcc!seismo!c3pe!c3engr!charles (Charles Green)
84*86d7f5d3SJohn MarinoTo: c3pe!decuac!dolqci!vrdxhq!seismo!lll-lcc!ptsfa!vixie!paul
85*86d7f5d3SJohn MarinoDate: Thu Jan  1 19:22:47 1987
86*86d7f5d3SJohn MarinoStatus: RO
87*86d7f5d3SJohn Marino
88*86d7f5d3SJohn MarinoWell, this isn't a compatible extension, but I have in times past wondered
89*86d7f5d3SJohn Marinoabout a facility to let you start a process at intervals of, say, 17 minutes,
90*86d7f5d3SJohn Marinoinstead of particular minutes out of each hour.
91*86d7f5d3SJohn Marino
92*86d7f5d3SJohn Marino<<	This was a popular request!	>>
93*86d7f5d3SJohn Marino
94*86d7f5d3SJohn MarinoFrom seismo!uwvax!astroatc!nicmad!norvax!mann Sun Jan  4 13:04:01 1987
95*86d7f5d3SJohn MarinoDate: Fri, 2 Jan 87 09:23:53 cst
96*86d7f5d3SJohn MarinoFrom: lll-lcc!seismo!uwvax!astroatc!nicmad!norvax!mann (Tom Mann)
97*86d7f5d3SJohn MarinoTo: ptsfa!vixie!paul
98*86d7f5d3SJohn MarinoStatus: RO
99*86d7f5d3SJohn Marino
100*86d7f5d3SJohn MarinoI'm not sure if it is in cron (either SysV or BSD ... if it is, I haven't
101*86d7f5d3SJohn Marinofigured it out ) but a comment feature would SURE BE NICE!.
102*86d7f5d3SJohn MarinoThere are times when I want to comment out an entry
103*86d7f5d3SJohn Marinofor a period of time; it might also make it a lot more legible.
104*86d7f5d3SJohn Marino
105*86d7f5d3SJohn Marino<<	My cron allows blank lines and standard #-type comments.  I know
106*86d7f5d3SJohn Marino	that one BSD4.2 cron I've used had it.  I don't know about SysV.  >>
107*86d7f5d3SJohn Marino
108*86d7f5d3SJohn MarinoFrom ptsfa!hoptoad!hugh Mon Jan  5 10:26:46 1987
109*86d7f5d3SJohn MarinoDate: Mon, 5 Jan 87 01:22:17 PST
110*86d7f5d3SJohn MarinoFrom: hoptoad!hugh (Hugh Daniel)
111*86d7f5d3SJohn MarinoTo: ptsfa!vixie!paul
112*86d7f5d3SJohn MarinoStatus: RO
113*86d7f5d3SJohn Marino
114*86d7f5d3SJohn Marino  Hi, I do have a BIG one that I would like.  I want to log ALL output
115*86d7f5d3SJohn Marinofrom command lines into a file for each line.  Thus I might have a chance
116*86d7f5d3SJohn Marinoof finding out why my crontab entry did not work.
117*86d7f5d3SJohn Marino  This would seem to work best if done by cron, as it is now I have a google
118*86d7f5d3SJohn Marinoof shell scripts laying about just to put the error output where I can see
119*86d7f5d3SJohn Marinoit.
120*86d7f5d3SJohn Marino
121*86d7f5d3SJohn Marino<<	My cron (and the SysV cron) will send mail to the owner of the
122*86d7f5d3SJohn Marino	particular crontab file if a command generates any output on stdout
123*86d7f5d3SJohn Marino	or stderr.  This can be irritating, but if you write a script such
124*86d7f5d3SJohn Marino	that any output means a problem occurred, you can avoid most logfile
125*86d7f5d3SJohn Marino	needs, and not generate mail except in unforeseen circumstances.   >>
126*86d7f5d3SJohn Marino
127*86d7f5d3SJohn MarinoFrom ptsfa!dual!ucbvax!ihnp4!anvil!es!Robert_Toxen Mon Jan  5 13:08:46 1987
128*86d7f5d3SJohn MarinoFrom: dual!ucbvax!ihnp4!anvil!es!Robert_Toxen
129*86d7f5d3SJohn MarinoDate: Fri,  2 Jan 87 14:25:29 EST
130*86d7f5d3SJohn MarinoTo: anvil!ihnp4!ucbvax!dual!ptsfa!vixie!paul
131*86d7f5d3SJohn MarinoStatus: RO
132*86d7f5d3SJohn Marino
133*86d7f5d3SJohn MarinoHere are some suggestions:
134*86d7f5d3SJohn Marino1. Run it through the C preprocessor via "/lib/<whatever>".
135*86d7f5d3SJohn Marino
136*86d7f5d3SJohn Marino<<	hmmm. this seems of limited utility, and if you really wanted
137*86d7f5d3SJohn Marino	to do it that way, you could do it yourself (since users can
138*86d7f5d3SJohn Marino	write to their own crontab files).  I'll add '-' (read stdin)
139*86d7f5d3SJohn Marino	to the crontab installer program to facilitate this.		>>
140*86d7f5d3SJohn Marino
141*86d7f5d3SJohn Marino2. Allow specifying every Nth day of week, i.e., every second Wednesday.
142*86d7f5d3SJohn Marino   I did this to calendar by separating the day of week (Wed=4, which one
143*86d7f5d3SJohn Marino   to start on and N with slashes).  I took modulo the day of year as a
144*86d7f5d3SJohn Marino   starting point so that someone with a desk calendar documenting such
145*86d7f5d3SJohn Marino   things can easily determine the offset (second number).  I did this
146*86d7f5d3SJohn Marino   while at SGI; alas I don't have a copy of the code.
147*86d7f5d3SJohn Marino
148*86d7f5d3SJohn Marino<<	I can see how this could be useful, but I'm not sure how I'd
149*86d7f5d3SJohn Marino	implement it.  Cron currently doesn't keep track of the last time
150*86d7f5d3SJohn Marino	a given command was run; whether the current Wednesday is the first
151*86d7f5d3SJohn Marino	or second since the command was last run would be pretty hard to
152*86d7f5d3SJohn Marino	figure out.  I'd have to keep a database of commands and their
153*86d7f5d3SJohn Marino	execution around, and purge it when the crontab was overwritten.
154*86d7f5d3SJohn Marino	This is too much work for me, but if someone adds it, let me know.  >>
155*86d7f5d3SJohn Marino
156*86d7f5d3SJohn MarinoFrom ptsfa!ames!seismo!cbmvax!devon!paul Tue Jan  6 05:50:17 1987
157*86d7f5d3SJohn MarinoFrom: ames!seismo!cbmvax!devon!paul
158*86d7f5d3SJohn MarinoTo: cbmvax!seismo!nike!ptsfa!vixie!paul
159*86d7f5d3SJohn MarinoDate: Mon Jan  5 09:29:57 1987
160*86d7f5d3SJohn MarinoStatus: RO
161*86d7f5d3SJohn Marino
162*86d7f5d3SJohn MarinoOne problem that has always plagued me with cron is the assumed ORing.
163*86d7f5d3SJohn MarinoI'd like to see some type of ANDing implemented.  I guess I can best
164*86d7f5d3SJohn Marinodescribe this by example.  Say I have the following line in my crontab
165*86d7f5d3SJohn Marinofile:
166*86d7f5d3SJohn Marino
167*86d7f5d3SJohn Marino*  *  4-31  *  1-6	/usr/bin/command
168*86d7f5d3SJohn Marino
169*86d7f5d3SJohn MarinoWhat this does is run 'command' on the 4th thru 31st days of the
170*86d7f5d3SJohn Marinomonth, AND on Monday thru Saturday; which probably means running it
171*86d7f5d3SJohn Marinoevery day of the month (unless Sunday falls on days 1-3).  This
172*86d7f5d3SJohn Marinohappens because cron runs the command if the day-of-month OR the
173*86d7f5d3SJohn Marinoday-of-week is true.
174*86d7f5d3SJohn Marino
175*86d7f5d3SJohn MarinoWhat I'd like to happen with the above line is to run the command ONLY
176*86d7f5d3SJohn Marinoon Monday thru Saturday any time after the 3rd of the month, e.g. if
177*86d7f5d3SJohn Marinothe day-of-month AND the day-of-week are true.
178*86d7f5d3SJohn Marino
179*86d7f5d3SJohn MarinoMy proposal to you is to implement some special chars for the first
180*86d7f5d3SJohn Marinofive fields.  Examples:
181*86d7f5d3SJohn Marino
182*86d7f5d3SJohn Marino*  *  !1-3  *  1-6	/usr/bin/command
183*86d7f5d3SJohn Marino
184*86d7f5d3SJohn Marino(run command Mon-Sat, but NOT [!] on the first 3 days of the month)
185*86d7f5d3SJohn Marino
186*86d7f5d3SJohn Marino*  *  &4-31 *  &1-6	/usr/bin/command
187*86d7f5d3SJohn Marino
188*86d7f5d3SJohn Marino(run command if day-of-month AND day-of-week are true)
189*86d7f5d3SJohn Marino
190*86d7f5d3SJohn MarinoGet the picture?  This would be compatable with existing versions of
191*86d7f5d3SJohn Marinocron (which wouldn't currently be using any special characters, so
192*86d7f5d3SJohn Marinothat old crontabs would be handled correctly).
193*86d7f5d3SJohn Marino
194*86d7f5d3SJohn Marino<<	This message made me aware of the actual boolean expression involved
195*86d7f5d3SJohn Marino	in a crontab entry.  I'd assumed that it was
196*86d7f5d3SJohn Marino		(minute && hour && DoM && month && DoW)
197*86d7f5d3SJohn Marino	But it's really
198*86d7f5d3SJohn Marino		(minute && hour && month && (DoM || DoW))
199*86d7f5d3SJohn Marino
200*86d7f5d3SJohn Marino	I can see some value in changing this, but with a fixed order of
201*86d7f5d3SJohn Marino	fields, operators get to be kindof unary, which && and || really
202*86d7f5d3SJohn Marino	aren't.  If someone has an idea on a syntax that allows useful
203*86d7f5d3SJohn Marino	variations to the standard (&& && && (||)) default, please suggest. >>
204*86d7f5d3SJohn Marino
205*86d7f5d3SJohn MarinoFrom bobkat!pedz Tue Jan  6 20:02:10 1987
206*86d7f5d3SJohn MarinoFrom: pedz@bobkat.UUCP (Pedz Thing)
207*86d7f5d3SJohn MarinoDate: 2 Jan 87 17:34:44 GMT
208*86d7f5d3SJohn MarinoStatus: RO
209*86d7f5d3SJohn Marino
210*86d7f5d3SJohn MarinoLog files!  It would be nice to be able to specify a log for cron
211*86d7f5d3SJohn Marinoitself and also a log for each program's stdout and stderr to go to.
212*86d7f5d3SJohn MarinoThe latter can of course be done with > and 2> but it would be nice if
213*86d7f5d3SJohn Marinothere could be a single line with some sort of pattern like
214*86d7f5d3SJohn Marino`> /usr/spool/log/%' and the command would be substituted for the %.
215*86d7f5d3SJohn MarinoAnother thing which would be nice is to be able to specify which shell
216*86d7f5d3SJohn Marinoto call to give the command to.
217*86d7f5d3SJohn Marino
218*86d7f5d3SJohn Marino<<	Log files are done with mail.  The '%' idea could be useful if
219*86d7f5d3SJohn Marino	a different character were used (% is special to cron, see man
220*86d7f5d3SJohn Marino	page); a different directory would have to be chosen, since each
221*86d7f5d3SJohn Marino	user has their own crontab file; and something intelligent would
222*86d7f5d3SJohn Marino	have to be done in the file naming, since the first word of the
223*86d7f5d3SJohn Marino	command might be ambiguous (with other commands).  In short, it's
224*86d7f5d3SJohn Marino	too much work.  Sorry.						  >>
225*86d7f5d3SJohn Marino
226*86d7f5d3SJohn MarinoFrom guy%gorodish@sun Tue Jan  6 20:03:13 1987
227*86d7f5d3SJohn MarinoFrom: guy%gorodish@sun (Guy Harris)
228*86d7f5d3SJohn MarinoMessage-ID: <10944@sun.uucp>
229*86d7f5d3SJohn MarinoDate: 5 Jan 87 12:09:09 GMT
230*86d7f5d3SJohn MarinoReferences: <429@vixie.UUCP> <359@bobkat.UUCP>
231*86d7f5d3SJohn MarinoSender: news@sun.uucp
232*86d7f5d3SJohn MarinoStatus: RO
233*86d7f5d3SJohn Marino
234*86d7f5d3SJohn Marino> Another thing which would be nice is to be able to specify which shell
235*86d7f5d3SJohn Marino> to call to give the command to.
236*86d7f5d3SJohn Marino
237*86d7f5d3SJohn MarinoWell, the obvious choice would be the user's shell, but this wouldn't work
238*86d7f5d3SJohn Marinofor accounts like "uucico".
239*86d7f5d3SJohn Marino
240*86d7f5d3SJohn Marino<<	I use the owning user's shell, and to handle "uucico" I check a
241*86d7f5d3SJohn Marino	list of "acceptable shells" (currently compiled in, does anybody
242*86d7f5d3SJohn Marino	mind?), substituting a default (compiled in) shell if the user's
243*86d7f5d3SJohn Marino	shell isn't on the list.
244*86d7f5d3SJohn Marino
245*86d7f5d3SJohn Marino	BTW, "compiled in" means that it's in a .h file, easily changed
246*86d7f5d3SJohn Marino	during installation, but requiring recompilation to modify.  You
247*86d7f5d3SJohn Marino	don't have to go digging through the code to find it...		  >>
248*86d7f5d3SJohn Marino
249*86d7f5d3SJohn MarinoFrom qantel!hplabs!ucbvax!mwm@violet.berkeley.edu Tue Jan  6 21:24:48 1987
250*86d7f5d3SJohn MarinoTo: hplabs!qantel!vixie!paul (Paul Vixie Esq)
251*86d7f5d3SJohn MarinoDate: 04 Jan 87 00:42:35 PST (Sun)
252*86d7f5d3SJohn MarinoFrom: Mike Meyer <mwm@violet.berkeley.edu>
253*86d7f5d3SJohn MarinoStatus: RO
254*86d7f5d3SJohn Marino
255*86d7f5d3SJohn Marino<<[Discussion of RMS/FSF, and mwm's GNU Cron deleted]>>
256*86d7f5d3SJohn Marino
257*86d7f5d3SJohn MarinoOh, yeah - here are the extensions on my cron:
258*86d7f5d3SJohn Marino
259*86d7f5d3SJohn Marino1) Sunday is both day 0 and day 7, so it complies with both SysV and
260*86d7f5d3SJohn MarinoBSD cron.
261*86d7f5d3SJohn Marino
262*86d7f5d3SJohn Marino<<	Good idea. I did it too, thanks for informing me.	>>
263*86d7f5d3SJohn Marino
264*86d7f5d3SJohn Marino2) At is integrated into the cron. Instead of atrun to scan the
265*86d7f5d3SJohn Marino/usr/spool/at directory, at files are put into the /usr/lib/cron
266*86d7f5d3SJohn Marinodirectory along with users cron files, and cron fabricates a line from
267*86d7f5d3SJohn Marinoa crontab file to run them. This is considered a major win by all who
268*86d7f5d3SJohn Marinouse it.
269*86d7f5d3SJohn Marino
270*86d7f5d3SJohn Marino<<	I don't use 'at', and my cron doesn't do anything with it.  To run
271*86d7f5d3SJohn Marino	'at', I use 'atrun' the same way the current BSD cron does.  My
272*86d7f5d3SJohn Marino	crontab files are in /usr/spool/cron/crontabs, in the SysV
273*86d7f5d3SJohn Marino	tradition -- not in /usr/lib/cron.  This is a configuration
274*86d7f5d3SJohn Marino	parameter, of course.						>>
275*86d7f5d3SJohn Marino
276*86d7f5d3SJohn MarinoThere are two known restrictions:
277*86d7f5d3SJohn Marino
278*86d7f5d3SJohn Marino1) I don't support any of the SysV security hooks. I don't have a use
279*86d7f5d3SJohn Marinofor them, and RMS didn't like the idea at all :-).
280*86d7f5d3SJohn Marino
281*86d7f5d3SJohn Marino<<	This means cron.allow and cron.deny.  I plan to support them, as
282*86d7f5d3SJohn Marino	they've been quite helpful at various HPUX sites I've administered. >>
283*86d7f5d3SJohn Marino
284*86d7f5d3SJohn Marino2) Cron expects to be able to create files with names longer than 14
285*86d7f5d3SJohn Marinocharacters, which makes it hard to run on SysV. At least one person
286*86d7f5d3SJohn Marinowas working on a port, but I don't know how it's going. That might
287*86d7f5d3SJohn Marinomake for a good reason for releasing yours, right there.
288*86d7f5d3SJohn Marino
289*86d7f5d3SJohn Marino<<	If someone has SysV (with the 14-character limit), they probably
290*86d7f5d3SJohn Marino	won't want my cron, since it doesn't add much to the standard
291*86d7f5d3SJohn Marino	version (which they may have support for).  My cron is not currently
292*86d7f5d3SJohn Marino	portable to non-BSD systems, since it relies on interval timers (I
293*86d7f5d3SJohn Marino	needed to sleep for intervals more granular than seconds alone would
294*86d7f5d3SJohn Marino	allow).  The port would be trivial, and I will do it if a lot of
295*86d7f5d3SJohn Marino	people ask for it...						>>
296*86d7f5d3SJohn Marino
297*86d7f5d3SJohn MarinoOh, yeah - I'm going to see about getting this cron integrated into
298*86d7f5d3SJohn Marinothe next 4BSD release.
299*86d7f5d3SJohn Marino
300*86d7f5d3SJohn Marino<<	How does one go about this?  I have a few nifty gadgets I'd like
301*86d7f5d3SJohn Marino	to contribute, this cron being one of them...			>>
302*86d7f5d3SJohn Marino
303*86d7f5d3SJohn Marino<<[more FSF/GNU discussion deleted]>>
304*86d7f5d3SJohn Marino
305*86d7f5d3SJohn MarinoFrom qantel!hplabs!ames!ut-sally!ut-ngp!melpad!bigtex!james Tue Jan  6 21:24:57 1987
306*86d7f5d3SJohn MarinoPosted-Date: Fri, 2 Jan 87 19:26:16 est
307*86d7f5d3SJohn MarinoDate: Fri, 2 Jan 87 19:26:16 est
308*86d7f5d3SJohn MarinoFrom: hplabs!ames!ut-sally!ut-ngp!bigtex!james
309*86d7f5d3SJohn MarinoTo: vixie!paul
310*86d7f5d3SJohn MarinoStatus: RO
311*86d7f5d3SJohn Marino
312*86d7f5d3SJohn MarinoYes!!!  There are several critical failures in System V cron...
313*86d7f5d3SJohn Marino
314*86d7f5d3SJohn Marino1. Pass all variables in cron's environment into the environment of things
315*86d7f5d3SJohn Marino   cron starts up, or at least into the crontab entries started up (at jobs
316*86d7f5d3SJohn Marino   will inherit the environment of the user).  If nothing else it is critically
317*86d7f5d3SJohn Marino   important that the TZ variable be passed on.  PATH should be passed on too.
318*86d7f5d3SJohn Marino   Basically, passing environment values allows one to design a standard
319*86d7f5d3SJohn Marino   environment with TZ and PATH and have that run by everything.  If anyone
320*86d7f5d3SJohn Marino   tells you this is no big deal, consider what happens when uucico is
321*86d7f5d3SJohn Marino   started by cron in CA to make a long distance phone link...  Unless the
322*86d7f5d3SJohn Marino   administrator is really on his/her toes, calls scheduled at 5pm will really
323*86d7f5d3SJohn Marino   go at two in the afternoon, needlessly incurring huge phone bills, all
324*86d7f5d3SJohn Marino   because System V refuses to pass the TZ from its environment down.  There
325*86d7f5d3SJohn Marino   are work arounds, but only putting it in cron will really work.  This is
326*86d7f5d3SJohn Marino   not a security hole.
327*86d7f5d3SJohn Marino
328*86d7f5d3SJohn Marino<<	delete TERM and TERMCAP; modify HOME, USER, and CWD; pass TZ and
329*86d7f5d3SJohn Marino	PATH through undisturbed.  any other requests out there?
330*86d7f5d3SJohn Marino
331*86d7f5d3SJohn Marino	BSD doesn't have this problem -- TZ is passed right on through if
332*86d7f5d3SJohn Marino	you define it in the shell before starting my cron daemon.  However,
333*86d7f5d3SJohn Marino	the BSD I'm running this on doesn't need TZ to be defined anyway...
334*86d7f5d3SJohn Marino	The default in the kernel has been just fine so far...  But just the
335*86d7f5d3SJohn Marino	same, if/when I port to SysV (I guess I really should), I'll make
336*86d7f5d3SJohn Marino	sure this works right.
337*86d7f5d3SJohn Marino
338*86d7f5d3SJohn Marino	I guess I've been spoiled.  HPUX is SysV-based, and I never had a
339*86d7f5d3SJohn Marino	problem with cron and TZ when I used it.			  >>
340*86d7f5d3SJohn Marino
341*86d7f5d3SJohn Marino2. A way to avoid logging stuff in /usr/lib/cron/log.  I have a cron entry
342*86d7f5d3SJohn Marino   run uudemon.hr every 10 minutes.  This is 144 times/day.  Each run generates
343*86d7f5d3SJohn Marino   three lines of text, for a total of 432 lines of text I don't want to see.
344*86d7f5d3SJohn Marino   Obviously this should be optional, but it would be nice if there were a
345*86d7f5d3SJohn Marino   way to flag an entry so that it wasn't logged at all unless there was an
346*86d7f5d3SJohn Marino   error.
347*86d7f5d3SJohn Marino
348*86d7f5d3SJohn Marino<<	I don't know nothin' 'bout no /usr/lib/cron/log.  What is this file?
349*86d7f5d3SJohn Marino	I don't see any reason to create log entries, given the mail-the-
350*86d7f5d3SJohn Marino	output behaviour.  Opinions, anyone?				>>
351*86d7f5d3SJohn Marino
352*86d7f5d3SJohn MarinoI will come up with other ideas no doubt, but I can always implement them
353*86d7f5d3SJohn Marinomyself.
354*86d7f5d3SJohn Marino
355*86d7f5d3SJohn Marino<<	That's what I like about PD software.  Please send me the diffs!  >>
356*86d7f5d3SJohn Marino
357*86d7f5d3SJohn MarinoThe other problem you have is making sure you can run standard
358*86d7f5d3SJohn Marinocrontabs.  I would suggest something like this: if the command part of the
359*86d7f5d3SJohn Marinoentry starts with an unescaped -, then flags and options follow immediately
360*86d7f5d3SJohn Marinothereafter.  As in:
361*86d7f5d3SJohn Marino
362*86d7f5d3SJohn Marino2,12,22,32,42,52 * * * * -q /usr/lib/uucp/uudemon.hr
363*86d7f5d3SJohn Marino
364*86d7f5d3SJohn MarinoThis could mean do not log the uudemon.hr run unless there is a problem of
365*86d7f5d3SJohn Marinosome kind.  This is probably safe as not many filenames start with "-", and
366*86d7f5d3SJohn Marinothose that do are already a problem for people.
367*86d7f5d3SJohn Marino
368*86d7f5d3SJohn Marino<<	Since I don't plan on supporting /usr/lib/cron/log in ANY form unless
369*86d7f5d3SJohn Marino	many people request it, I won't be needing -q as you've defined it.
370*86d7f5d3SJohn Marino	I could use something like this to avoid sending mail on errors, for
371*86d7f5d3SJohn Marino	the occasional script that you don't want to bullet-proof.
372*86d7f5d3SJohn Marino
373*86d7f5d3SJohn Marino	The compatibility issue is CRITICAL.  The 4.3BSD crontab format is
374*86d7f5d3SJohn Marino	a crime against the whole philosophy of Unix(TM), in my opinion.   >>
375*86d7f5d3SJohn Marino
376*86d7f5d3SJohn MarinoOne other minor thing to consider is the ulimit: can different users get
377*86d7f5d3SJohn Marinodifferent ulimits for their crontab entries?
378*86d7f5d3SJohn Marino
379*86d7f5d3SJohn Marino<<	Boy I'm ignorant today.  What's a ulimit, and what should I do with
380*86d7f5d3SJohn Marino	it in a crontab?  Suggestions, enlightenment, etc ??		   >>
381*86d7f5d3SJohn Marino
382*86d7f5d3SJohn MarinoFrom qantel!lll-crg!ames!uw-beaver!uw-nsr!john Tue Jan  6 23:32:44 1987
383*86d7f5d3SJohn MarinoDate: Thu, 1 Jan 87 10:53:05 pst
384*86d7f5d3SJohn MarinoFrom: lll-crg!ames!uw-beaver!uw-nsr!john (John Sambrook 5-7433)
385*86d7f5d3SJohn MarinoTo: vixie!paul
386*86d7f5d3SJohn MarinoStatus: RO
387*86d7f5d3SJohn Marino
388*86d7f5d3SJohn MarinoHow about not hardwiring the default environment that cron builds for its
389*86d7f5d3SJohn Marinochildren in the cron program itself?  Our cron does this and it's the pits
390*86d7f5d3SJohn Marinobecause we are TZ=PST8PDT not TZ=EST5EDT !
391*86d7f5d3SJohn Marino
392*86d7f5d3SJohn Marino<<	yeachk.  I assure you, I will not hardwire the TZ!		>>
393*86d7f5d3SJohn MarinoFrom ptsfa!well!dv Fri Jan  9 04:01:50 1987
394*86d7f5d3SJohn MarinoDate: Thu, 8 Jan 87 23:50:40 pst
395*86d7f5d3SJohn MarinoFrom: well!dv (David W. Vezie)
396*86d7f5d3SJohn MarinoTo: ptsfa!vixie!paul
397*86d7f5d3SJohn MarinoStatus: RO
398*86d7f5d3SJohn Marino
399*86d7f5d3SJohn Marino6, have a special notation called 'H' which would expand to weekends
400*86d7f5d3SJohn Marino   and holidays (you'd have to keep a database somewhere of real
401*86d7f5d3SJohn Marino   holidays), and also 'W' for workdays (neither weekend or holiday).
402*86d7f5d3SJohn Marino
403*86d7f5d3SJohn Marino<<	Too much work.  There should be a standard way to define and
404*86d7f5d3SJohn Marino	detect holidays under Unix(TM); if there were, I'd use it.  As
405*86d7f5d3SJohn Marino	it is, I'll leave this for someone else to add.
406*86d7f5d3SJohn Marino
407*86d7f5d3SJohn Marino	I can see the usefulness; it just doesn't quite seem worth it.    >>
408*86d7f5d3SJohn MarinoFrom qantel!gatech!akgua!blnt1!jat Wed Jan 14 20:00:40 1987
409*86d7f5d3SJohn MarinoDate: Tue, 13 Jan 87 16:39:38 EST
410*86d7f5d3SJohn MarinoFrom: gatech!akgua!blnt1!jat
411*86d7f5d3SJohn MarinoStatus: RO
412*86d7f5d3SJohn Marino
413*86d7f5d3SJohn Marino1) Add some way to tell cron to reread the files, say kill -1 <pid>
414*86d7f5d3SJohn Marino
415*86d7f5d3SJohn Marino<<	whenever the 'crontab' program is run and updates a crontab file,
416*86d7f5d3SJohn Marino	a file /usr/spool/cron/POKECRON is created; next time the cron
417*86d7f5d3SJohn Marino	daemon wakes up, it sees it, and re-reads the crontab files.
418*86d7f5d3SJohn Marino
419*86d7f5d3SJohn Marino	I thought of handling the signal; even implemented it.  Then this
420*86d7f5d3SJohn Marino	clever idea hit me and I ripped it all out and added a single
421*86d7f5d3SJohn Marino	IF-statement to handle the POKECRON file.			>>
422*86d7f5d3SJohn Marino
423*86d7f5d3SJohn Marino2) Have some kind of retry time so that if a command fails, cron will try to
424*86d7f5d3SJohn Marino   execute it again after a certain period.  This is useful if you have some
425*86d7f5d3SJohn Marino   type of cleanup program that can run at the scheduled time for some reason
426*86d7f5d3SJohn Marino   (such as locked device, unmounted filesystem, etc).
427*86d7f5d3SJohn Marino
428*86d7f5d3SJohn Marino<<	Hmmm, sounds useful.  I could do this by submitting an 'at' job...
429*86d7f5d3SJohn Marino	I'll think about it.						>>
430*86d7f5d3SJohn MarinoFrom ptsfa!dual!ucbvax!ihnp4!mtuxo!ender Sat Jan  3 16:54:00 1987
431*86d7f5d3SJohn MarinoFrom: dual!ucbvax!ihnp4!mtuxo!ender
432*86d7f5d3SJohn MarinoDate: Sat, 3 Jan 87 14:05:13 PST
433*86d7f5d3SJohn MarinoTo: ucbvax!dual!ptsfa!vixie!paul
434*86d7f5d3SJohn MarinoStatus: RO
435*86d7f5d3SJohn Marino
436*86d7f5d3SJohn MarinoIt would be nice if nonprivileged users can setup personal crontab files
437*86d7f5d3SJohn Marino(~/.cronrc, say) and be able to run personal jobs at regular intervals.
438*86d7f5d3SJohn Marino
439*86d7f5d3SJohn Marino<<	this is done, but in the SysV style: the 'crontab' program installs
440*86d7f5d3SJohn Marino	a new crontab file for the executing user (can be overridden by root
441*86d7f5d3SJohn Marino	for setup of uucp and news).  the advantage of this is that (1) when
442*86d7f5d3SJohn Marino	a crontab is changed, the daemon can be informed automatically; and
443*86d7f5d3SJohn Marino	(2) the file can be syntax-checked before installation.		>>
444*86d7f5d3SJohn MarinoFrom ptsfa!ames!seismo!ihnp4!lcc!richard Fri Jan 16 04:47:33 1987
445*86d7f5d3SJohn MarinoDate: Fri, 16 Jan 87 07:44:57 EST
446*86d7f5d3SJohn MarinoTo: nike!ptsfa!vixie!paul
447*86d7f5d3SJohn MarinoStatus: RO
448*86d7f5d3SJohn Marino
449*86d7f5d3SJohn MarinoThe System V cron is nice, but it has a few annoying features.  One is that
450*86d7f5d3SJohn Marinoits mail files will say that the previous message is the output of "one of your
451*86d7f5d3SJohn Marinocron commands."  I wish it would say WHICH cron commmand.
452*86d7f5d3SJohn Marino
453*86d7f5d3SJohn Marino<<	Done.  Also which shell, which user (useful when the mail gets
454*86d7f5d3SJohn Marino	forwarded), which home directory, and other useful crud.	>>
455*86d7f5d3SJohn Marino
456*86d7f5d3SJohn MarinoAnother problem is with timezones.  It is necessary to specify TZ=PST8PDT (or
457*86d7f5d3SJohn Marinowhatever) when you invoke cron (from inittab, or /etc/rc) and it is also
458*86d7f5d3SJohn Marinonecessary to add TZ=PST8PDT to each crontab line which might need it.  Cron
459*86d7f5d3SJohn Marinoshould automatically export its idea of the "TZ" to each invoked command, and
460*86d7f5d3SJohn Marinoit should be possible to put a line in the crontab file which overrides that
461*86d7f5d3SJohn Marinofor every command in the file (e.g., most users are on EST, so cron is run
462*86d7f5d3SJohn Marinowith TZ=EST5EDT; but one user is usually on PST and wants all of his cron
463*86d7f5d3SJohn Marinocommands to run with TZ=PST8PDT).  This might be extended to allow any
464*86d7f5d3SJohn Marinoenvironment variable to be specified once for the whole crontab file (e.g.,
465*86d7f5d3SJohn MarinoPATH).
466*86d7f5d3SJohn Marino
467*86d7f5d3SJohn Marino<<	Well, since I run the user's shell, you could put this into .cshrc.
468*86d7f5d3SJohn Marino	generic environment-variable setting could be useful, though.  Since
469*86d7f5d3SJohn Marino	I have to modify the environment anyway, I'll consider this.	  >>
470*86d7f5d3SJohn Marino
471*86d7f5d3SJohn MarinoA log file might be a nice idea, but the System V cron log is too verbose.
472*86d7f5d3SJohn MarinoI seem to remember that cron keeps it open, too; so you can't even have
473*86d7f5d3SJohn Marinosomething go and periodically clean it out.
474*86d7f5d3SJohn Marino
475*86d7f5d3SJohn Marino<<	I don't do /usr/lib/cron/log.  I wasn't aware of this file until I
476*86d7f5d3SJohn Marino	got all these suggestions.  Do people want this file?  Tell me!    >>
477