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