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: src/usr.sbin/cron/doc/MAIL,v 1.4 1999/08/28 01:15:53 peter Exp $ 7 8From ptsfa!lll-crg!ames!acornrc!bob Wed Dec 31 10:07:08 1986 9Date: Wed, 31 Dec 86 08:59:31 pst 10From: lll-crg!ames!acornrc!bob (Bob Weissman) 11To: ptsfa!vixie!paul 12Status: RO 13 14Sure, here's a suggestion: I'd like to be able to run a program, say, 15every two hours. Current cron requires me to write 160,2,4,6,8,10,12,14,16,18,20,22 in the hours field. How about a notation 17to 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 26From drw@mit-eddie Wed Dec 31 18:25:27 1986 27Date: Wed, 31 Dec 86 14:28:19 est 28From: drw@mit-eddie (Dale Worley) 29To: mit-eddie!vixie!paul 30Status: RO 31 32We have a lot of lines in our crontab of the form 33 34 00 12 * * * su user < /usr/users/user/script.file 35 36This barfs (silently!) on our system (Dec Ultrix 1.2 == 4.2bsd) if 37user's shell is csh. This, I am told, is because csh requires that 38the 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 40set up the environment enough for csh to run, and cron just inherits 41the situation.) Anyway, the point is that if you find out what csh 42really needs in its environment, you might want to set up cron to 43provide some reasonable defaults (if it isn't supplied by cron's 44parent). Also, could you tell me what csh needs, if you find out, so 45we 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... >> 52From ptsfa!ames!seismo!dgis!generous Thu Jan 1 07:33:17 1987 53Date: Thu Jan 1 10:29:20 1987 54From: ames!seismo!dgis!generous (Curtis Generous) 55To: nike!ptsfa!vixie!paul 56Status: RO 57 58Paul: 59 60One of the limitations of the present versions of cron is the lack 61of the capability of specifying a way to execute a command every 62n units of time. 63 64Here is a good example: 65 66# Present method to start up uucico 6702,12,22,32,42,52 * * * * exec /usr/lib/uucp/uucico -r1 68 69# New method ?? (the ':' here is just one possibility for syntax) 7002:10 * * * * exec /usr/lib/uucp/uucico -r1 71 72This method would prove very helpful for those programs that get started 73every few minutes, making the entry long and not easily readable. The first 74number would specify the base time, and the second number the repetition 75interval. 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 81From ptsfa!lll-lcc!seismo!decuac!c3pe!c3engr!charles Thu Jan 1 17:04:24 1987 82From: lll-lcc!seismo!c3pe!c3engr!charles (Charles Green) 83To: c3pe!decuac!dolqci!vrdxhq!seismo!lll-lcc!ptsfa!vixie!paul 84Date: Thu Jan 1 19:22:47 1987 85Status: RO 86 87Well, this isn't a compatible extension, but I have in times past wondered 88about a facility to let you start a process at intervals of, say, 17 minutes, 89instead of particular minutes out of each hour. 90 91<< This was a popular request! >> 92 93From seismo!uwvax!astroatc!nicmad!norvax!mann Sun Jan 4 13:04:01 1987 94Date: Fri, 2 Jan 87 09:23:53 cst 95From: lll-lcc!seismo!uwvax!astroatc!nicmad!norvax!mann (Tom Mann) 96To: ptsfa!vixie!paul 97Status: RO 98 99I'm not sure if it is in cron (either SysV or BSD ... if it is, I haven't 100figured it out ) but a comment feature would SURE BE NICE!. 101There are times when I want to comment out an entry 102for 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 107From ptsfa!hoptoad!hugh Mon Jan 5 10:26:46 1987 108Date: Mon, 5 Jan 87 01:22:17 PST 109From: hoptoad!hugh (Hugh Daniel) 110To: ptsfa!vixie!paul 111Status: RO 112 113 Hi, I do have a BIG one that I would like. I want to log ALL output 114from command lines into a file for each line. Thus I might have a chance 115of 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 117of shell scripts laying about just to put the error output where I can see 118it. 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 126From ptsfa!dual!ucbvax!ihnp4!anvil!es!Robert_Toxen Mon Jan 5 13:08:46 1987 127From: dual!ucbvax!ihnp4!anvil!es!Robert_Toxen 128Date: Fri, 2 Jan 87 14:25:29 EST 129To: anvil!ihnp4!ucbvax!dual!ptsfa!vixie!paul 130Status: RO 131 132Here are some suggestions: 1331. 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 1402. 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 155From ptsfa!ames!seismo!cbmvax!devon!paul Tue Jan 6 05:50:17 1987 156From: ames!seismo!cbmvax!devon!paul 157To: cbmvax!seismo!nike!ptsfa!vixie!paul 158Date: Mon Jan 5 09:29:57 1987 159Status: RO 160 161One problem that has always plagued me with cron is the assumed ORing. 162I'd like to see some type of ANDing implemented. I guess I can best 163describe this by example. Say I have the following line in my crontab 164file: 165 166* * 4-31 * 1-6 /usr/bin/command 167 168What this does is run 'command' on the 4th thru 31st days of the 169month, AND on Monday thru Saturday; which probably means running it 170every day of the month (unless Sunday falls on days 1-3). This 171happens because cron runs the command if the day-of-month OR the 172day-of-week is true. 173 174What I'd like to happen with the above line is to run the command ONLY 175on Monday thru Saturday any time after the 3rd of the month, e.g. if 176the day-of-month AND the day-of-week are true. 177 178My proposal to you is to implement some special chars for the first 179five 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 189Get the picture? This would be compatable with existing versions of 190cron (which wouldn't currently be using any special characters, so 191that 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 204From bobkat!pedz Tue Jan 6 20:02:10 1987 205From: pedz@bobkat.UUCP (Pedz Thing) 206Date: 2 Jan 87 17:34:44 GMT 207Status: RO 208 209Log files! It would be nice to be able to specify a log for cron 210itself and also a log for each program's stdout and stderr to go to. 211The latter can of course be done with > and 2> but it would be nice if 212there could be a single line with some sort of pattern like 213`> /usr/spool/log/%' and the command would be substituted for the %. 214Another thing which would be nice is to be able to specify which shell 215to 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 225From guy%gorodish@sun Tue Jan 6 20:03:13 1987 226From: guy%gorodish@sun (Guy Harris) 227Message-ID: <10944@sun.uucp> 228Date: 5 Jan 87 12:09:09 GMT 229References: <429@vixie.UUCP> <359@bobkat.UUCP> 230Sender: news@sun.uucp 231Status: 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 236Well, the obvious choice would be the user's shell, but this wouldn't work 237for 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 248From qantel!hplabs!ucbvax!mwm@violet.berkeley.edu Tue Jan 6 21:24:48 1987 249To: hplabs!qantel!vixie!paul (Paul Vixie Esq) 250Date: 04 Jan 87 00:42:35 PST (Sun) 251From: Mike Meyer <mwm@violet.berkeley.edu> 252Status: RO 253 254<<[Discussion of RMS/FSF, and mwm's GNU Cron deleted]>> 255 256Oh, yeah - here are the extensions on my cron: 257 2581) Sunday is both day 0 and day 7, so it complies with both SysV and 259BSD cron. 260 261<< Good idea. I did it too, thanks for informing me. >> 262 2632) 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 265directory along with users cron files, and cron fabricates a line from 266a crontab file to run them. This is considered a major win by all who 267use 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 275There are two known restrictions: 276 2771) I don't support any of the SysV security hooks. I don't have a use 278for 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 2832) Cron expects to be able to create files with names longer than 14 284characters, which makes it hard to run on SysV. At least one person 285was working on a port, but I don't know how it's going. That might 286make 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 296Oh, yeah - I'm going to see about getting this cron integrated into 297the 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 304From qantel!hplabs!ames!ut-sally!ut-ngp!melpad!bigtex!james Tue Jan 6 21:24:57 1987 305Posted-Date: Fri, 2 Jan 87 19:26:16 est 306Date: Fri, 2 Jan 87 19:26:16 est 307From: hplabs!ames!ut-sally!ut-ngp!bigtex!james 308To: vixie!paul 309Status: RO 310 311Yes!!! There are several critical failures in System V cron... 312 3131. 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 3402. 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 351I will come up with other ideas no doubt, but I can always implement them 352myself. 353 354<< That's what I like about PD software. Please send me the diffs! >> 355 356The other problem you have is making sure you can run standard 357crontabs. I would suggest something like this: if the command part of the 358entry starts with an unescaped -, then flags and options follow immediately 359thereafter. As in: 360 3612,12,22,32,42,52 * * * * -q /usr/lib/uucp/uudemon.hr 362 363This could mean do not log the uudemon.hr run unless there is a problem of 364some kind. This is probably safe as not many filenames start with "-", and 365those 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 375One other minor thing to consider is the ulimit: can different users get 376different 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 381From qantel!lll-crg!ames!uw-beaver!uw-nsr!john Tue Jan 6 23:32:44 1987 382Date: Thu, 1 Jan 87 10:53:05 pst 383From: lll-crg!ames!uw-beaver!uw-nsr!john (John Sambrook 5-7433) 384To: vixie!paul 385Status: RO 386 387How about not hardwiring the default environment that cron builds for its 388children in the cron program itself? Our cron does this and it's the pits 389because we are TZ=PST8PDT not TZ=EST5EDT ! 390 391<< yeachk. I assure you, I will not hardwire the TZ! >> 392From ptsfa!well!dv Fri Jan 9 04:01:50 1987 393Date: Thu, 8 Jan 87 23:50:40 pst 394From: well!dv (David W. Vezie) 395To: ptsfa!vixie!paul 396Status: RO 397 3986, 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. >> 407From qantel!gatech!akgua!blnt1!jat Wed Jan 14 20:00:40 1987 408Date: Tue, 13 Jan 87 16:39:38 EST 409From: gatech!akgua!blnt1!jat 410Status: RO 411 4121) 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 4222) 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. >> 429From ptsfa!dual!ucbvax!ihnp4!mtuxo!ender Sat Jan 3 16:54:00 1987 430From: dual!ucbvax!ihnp4!mtuxo!ender 431Date: Sat, 3 Jan 87 14:05:13 PST 432To: ucbvax!dual!ptsfa!vixie!paul 433Status: RO 434 435It 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. >> 443From ptsfa!ames!seismo!ihnp4!lcc!richard Fri Jan 16 04:47:33 1987 444Date: Fri, 16 Jan 87 07:44:57 EST 445To: nike!ptsfa!vixie!paul 446Status: RO 447 448The System V cron is nice, but it has a few annoying features. One is that 449its mail files will say that the previous message is the output of "one of your 450cron 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 455Another problem is with timezones. It is necessary to specify TZ=PST8PDT (or 456whatever) when you invoke cron (from inittab, or /etc/rc) and it is also 457necessary to add TZ=PST8PDT to each crontab line which might need it. Cron 458should automatically export its idea of the "TZ" to each invoked command, and 459it should be possible to put a line in the crontab file which overrides that 460for every command in the file (e.g., most users are on EST, so cron is run 461with TZ=EST5EDT; but one user is usually on PST and wants all of his cron 462commands to run with TZ=PST8PDT). This might be extended to allow any 463environment variable to be specified once for the whole crontab file (e.g., 464PATH). 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 470A log file might be a nice idea, but the System V cron log is too verbose. 471I seem to remember that cron keeps it open, too; so you can't even have 472something 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! >> 476