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