[CoLoCo] Batch/job process management ( next-gen cron )?
David L. Willson
DLWillson at TheGeek.NU
Mon Mar 10 01:15:39 GMT 2008
In the case of your specific example, I believe the requirement in English was "Attempt
x. If x succeeds, run y (and do not run alt_x). If x fails, run alt_x (and do not run y)."
I think the solution is: if x; then y; else alt_x; fi
On Sun, 9 Mar 2008 17:42:31 -0700, David L. Willson wrote
> David
>
> Your database and logging requirements are more than I can help with, but in
> the FWIW department, I might be able to help you build the control-of-flow
> structures you want...
>
> Check this out:
>
> trySomething && echo "success" || echo "failure"
>
> ^ behaves as you would expect. That is, when trySomething succeeds, echo "success"
> fires, and when trySomething fails, echo "failure" fires.
>
> It's interesting and educational to replace trySomething with true, which is a
> program that exits successfully and false, which is a program that exits with
> an error. Then test the execution of longer chains with more instances of
> true and false, to see how the chain evaluates.
>
> For example:
> true && true && false || echo "failure"
> ^ echoes "failure" because ALL of the &&-joined expressions must succeed for
> the ||-joined expression not to be evaluated.
>
> The first non-zero exit (error) causes a jump out of the &&-joined expressions
> to the first ||-joined expression. That leads to the possibility of
> 'subsequent try' branchings like this:
>
> false && true || echo "failure" && echo "success after failure"
>
> Combine that with compound statements using (sub-shell) and {current-shell}
> operators, and you might get the branching power you're looking for, at least.
>
> HTH,
>
> David L. Willson
> Trainer/Engineer/Consultant
> MCT, MCSE, Linux+
> (720) 333-LANS
>
> On Sun, 9 Mar 2008 17:26:44 -0600, David J W wrote
> > Hello,
> > First off an introduction as this is my first post:
> >
> > I work in Denver as a multi-hat developer: php/python/bash/c++
> > developer, linux system admin, and a intermediate MySQL database
> > administrator, and also my current company's R&D developer. I've been
> > working with *nix since 1996-97 when a c++ programming course I took was
> > taught exclusively on v220 terminals connected to a mini-computer.
> >
> > I'm on week 2 or maybe 3 of doing research for consolidating my company's
> > small and growing horde of cronjobs... its well over 150 script at this
> > point. The company CEO has directed me to start research and research I
> > have done.
> >
> > Why crontab sucks for what I need:
> >
> > Cron does a fantastic job at what it does, run something at X time.
> > The problem is, what if I need alt_X to run if X exists non-zero....
> > alright so I could do:
> > x || alt_x
> >
> > Now what if I need y to run after x if its successfull
> >
> > (x && y ) || alt_x
> >
> > Well thats not right? x could perform correctly then have y fail,
> > causing alt_x to run and possibly redo important operations/data.
> >
> > (x || alt_x) && y - except what if I don't want y to run if alt_x ends
> > up running?
> >
> > Now to make things fun.... lets say there is a chain of 4-5 scripts that
> > must run conditionally. I'm pretty decent with simple and/or logic, but I
> > know this would confuse anyone else to read and decypher. Making it so only
> > I and maybe one or two disciples can maintain the abomination that is the
> > company's backend underworld.
> >
> > Plan B (partially in effect)
> > Complex jobs are written as bash scripts. This is a step up from the
> > above, I can build a job with variables, capture output to temp files, and
> > use mail or sendmail to make customized emails. Whats lacking is
> > resuability. Sure I can write shell script libraries to reuse certain
> > things, like a bash wrapper function to handle individual scripts.... but
> > adding in context sensitive checks "has the word failure, critical, OMFG,
> > etc" would be hard coded in.
> >
> > Plan C ( what I am aiming for)
> > So I'm looking for a cronjob equivalent scheduling system that can be
> > configured by information stored in a database (MySQL, sqllite, whatever).
> > This phantom program would have the following specs:
> >
> > Run any process/job as either root or a specific user account
> > Record the job fitness ( maximum memory, time stats (rtime, utime,
> > overall)
> > Historical recording ( save input to DB or serialized filestore )
> > Context sensitive output handling
> > Digest email capability ( instead of 120-140 emails a day, I'd be
> > estatic with like 30)
> > SMP/pager capability
> >
> > I've started prototyping the above in python, but I figure to get this to
> > a stable enough product, it would take me 3-4 days of development time then
> > a residual 5-15 hours for the next month or two in responsive debugging.
> > >From my prototypes, I'd have a daemonized python script that would sleep
> > every 60 seconds, check the configuration database for changes and execute
> > jobs as needed. Job execution would consist of checking the jobs
> > credentials ( if run as X, fork, lock records to job handler PID, descend
> > privileges to specified user, chdir to script path, wrap the job in a
> > subprocess, respond to job events as needed ( stderr, ! zero return,
> > excessive run time, etc ).
> >
> > My question is, anyone see a better way, or a OSS project out there that
> > could do the above for me... even a beta project written in python or c++
> > could be workable by me. If you haven't noticed the varying levels of
> > sarcasm, I'm somewhat stretched thin right now.
> >
> > Thanks,
> > David
> >
> > --
> > Ubuntu-us-co mailing list
> > Ubuntu-us-co at lists.ubuntu.com
> > Modify settings or unsubscribe at:
> > https://lists.ubuntu.com/mailman/listinfo/ubuntu-us-co
>
> --
> Ubuntu-us-co mailing list
> Ubuntu-us-co at lists.ubuntu.com
> Modify settings or unsubscribe at:
> https://lists.ubuntu.com/mailman/listinfo/ubuntu-us-co
David L. Willson
Trainer/Engineer/Consultant
MCT, MCSE, Linux+
(720) 333-LANS
More information about the Ubuntu-us-co
mailing list