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