[CoLoCo] Batch/job process management ( next-gen cron )?

David L. Willson DLWillson at TheGeek.NU
Mon Mar 10 00:42:31 GMT 2008


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






More information about the Ubuntu-us-co mailing list