Cascaded Cron Jobs


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Cascaded Cron Jobs
# 1  
Old 04-15-2009
Cascaded Cron Jobs

Hello There,

I was trying to run cron jobs , but I wanted make next cron job dependent on previous one (Cascade them) . So the second cron job would be triggered only if first cron job ( which runs java code) was successful and not otherwise. My cron entries are as follows:

Quote:
45 03 * * * cron.java "Parameter1"
50 03 * * * cron.java "Parameter2"
52 03 * * * cron.java "Parameter3"
55 03 * * * cron.java "Parameter4"
58 03 * * * cron.java "Parameter5"
00 43 * * * cron.java "Parameter6"

As you can see first cron job would run @ 3:45 am and execute cron.java with "parameter1" passed as argument. What I want is to run 2nd cron job @ 3:50 am only if Java process created by 3:45 am cron has successfully executed and that (3:45 AM) JVM process has terminated successfully.

If Java process created by 3:45 am cron hasn't terminated ( still running ) then 3:50 cron should not run ( be in pending mode and monitor status of 3:45 am Java process) and as soon as 3:45 am Java process is complete , it should trigger 3:50 am process , which was in pending mode.

This will continue for each sub sequent processes...meaning 3:52 AM process will wait on 3:50 AM process .... and 3:55 AM process will wait on 3:52 AM process ...so on and so forth.

I am sure some of you experts have run into this and have different solutions to resolving it. Would appreciate if you could provide pointers on how to proceed from here.

Thanks,

Sam
# 2  
Old 04-15-2009
Hi,
I think You should have a look at a concept known as PID-files, ie a flag in the form of a file in a known location that indicates whether a process is running.
When a process starts, it writes its status to a file, maybe a PID or for example the text "running" and upon exit it writes "fail" or "success".
Any subsequent processes will check the known location for info and take action accordingly.

Unless You have very strict requirements on process control I find the file system very useful for simple tasks. You may of course run into problems with different types of erros, such as Your app not being able to return an exit code, handling erros that emanate from cron, etc.

/Lakris
# 3  
Old 04-15-2009
When I've needed to do this, I've had my first script (cron job) create a file which the second script must find before it can run, etc.
# 4  
Old 04-15-2009
As others have stated, use a file to tag to see if the process completed or is still running. If you can modify your java code, you can have the java code write the little status files. If that's not possible, just wrap it all up in a shell script. Something like;

For the 1st java process
Code:
#!/bin/sh

echo "running" > /var/tmp/process-status.txt

## Insert the method to launch your java code here.
## e.g. $JAVA_HOME/bin/java -jar /path/to/jarfile.jar

echo "complete" > /var/tmp/process-status.txt

And for the 2nd process, something like;
Code:
#!/bin/sh

COUNTER=0
# Do this 10 times. Keeps the process from running forever...
while [ $COUNTER -lt 11 ]; do
     if [ -f /var/tmp/process-status.txt ]; then

        # Nothing fancy, just snag the return code from grep.
        # send the output to /dev/null, because we don't really 
        # care about it.
        grep complete /var/tmp/process-status.txt &> /dev/null
    
        # if grep found complete, $? will be 0, otherwise 1.
        if [ $? -eq 0 ]; then
             # Insert the code to run your 2nd java app.
             # e.g. $JAVA_HOME/bin/java -jar /path/to/jar.file
          
              # remove the status file, so we don't get confused 
              # the next time we run.
              rm /var/tmp/process-status.txt
              
              # the break here will "break out" of the loop, regardless of the
              # status of the $COUNTER variable.
              break
        fi
    fi
    
    # the file either didn't exist, or the file doesn't have "complete" in it, so
    # we'll wait for 60 seconds and try again.
    sleep 60

    # increase our counter variable by 1.
    let COUNTER=COUNTER+1
done

if [ $COUNTER -eq "11" ]; then
   # Our counter variable got too big, which means that the 
   # loop would stopped. With the sleep in there, we waited 10 minutes 
   # for the earlier code to populate the file with "complete". We should
   # Probably generate an error of some type.
   #
   # If cron is setup properly, it'll email all output to root@localhost, so 
   # we'll just let cron handle notifying the operator.
   #
   echo "WARNING: $0 failed to run. Something is broken."
fi

So the 1st script creates a /var/tmp/process-status.txt file, with the word "running" in it. It then launches your java process. When the java process exits, it writes "complete" into the file.

The 2nd script will only start the 2nd java process if it can find the word "complete" in the /var/tmp/process-status.txt file. If it finds the word "complete" in the file, it will start up the 2nd java process. It'll do this check 10 times, waiting 60 seconds between checks. If all 10 checks fail, then it'll spit out an error. If cron is configured properly, cron will automatically generate an email to root@locahost with any output. You could probably run "mailx" or something to generate a nicer email message or something.

Note I didn't test any of this, so there are probably quite a few bugs, or better ways to do it (e.g. inside a for loop perhaps). I'm sure other posters will point those out. Smilie But it should give you a good idea on how to do it.
# 5  
Old 04-16-2009
Don't see why you have to have separate cron jobs! Why not just have a single script that joins all of the others together with their interdependencies?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Red Hat

Cron jobs

I'm running cronjobs on a redhat 5.X. Cronjobs are getting failed frequently so how to find the root cause (2 Replies)
Discussion started by: karthik9358
2 Replies

2. Solaris

Cron jobs and at jobs

There are two jobs in Solaris , Cron and at jobs.. I know how to disable or enable cron jobs. How can I enable at jobs and disable it. Kindly help. Rj (2 Replies)
Discussion started by: jegaraman
2 Replies

3. Shell Programming and Scripting

cron jobs

Hi, please help on this am trying to exec the below mentioned cron jobs but its getting failed fro the past two days ###but when am trying to execte the cron by the times 23,29 18 * * * /export/home/inrvgo/thelak/China.sh its getting exec properly please help on this #... (8 Replies)
Discussion started by: thelakbe
8 Replies

4. Shell Programming and Scripting

Help with cron jobs

Hi Frenz, How do we get a cron job running in background to foreground ? (3 Replies)
Discussion started by: mkalase
3 Replies

5. Linux

Cron jobs

Hi, I am a Linux administrator (newbie) in my company. The distro being used in the servers here is Centos 5.3 Just need to know, as a Linux administrator is it better for me to use /etc/crontab to set my cron jobs. I do not want to use the crontab -e to schedule my cron jobs. That means... (1 Reply)
Discussion started by: anaigini45
1 Replies

6. UNIX for Dummies Questions & Answers

cron jobs

Hi, We have a group of hosts using which the cron jobs are submitted... Few days ago i had submitted a cron job in of these hosts, but unfortunately forgot the host name :( Can anyone please help me out in finding this host name from which the cron s submitting the job, i dont want the... (2 Replies)
Discussion started by: bhavanisree
2 Replies

7. Solaris

cron jobs

how to Put a cron entry which should be same script triggered on every Saturday and 1st of every month at 01.00 GMT. 0 2 1 * 6 --( At 2.00 GMT every sat & on 1st of every month) the above syntax is correct? Thanks (1 Reply)
Discussion started by: kurva
1 Replies

8. Solaris

Cron Jobs

I'm trying to run cron jobs to start any inhibited processes after a system reboot. I can schedule th cron, but i'm confused as to how to incorporated the reboot, since reboot is scheduled at different times, once every month. How can I write this to start every 15 min after after a reboot ... (2 Replies)
Discussion started by: Remi
2 Replies

9. UNIX for Advanced & Expert Users

cron jobs

I need to monitor my cron jobs with another unix machine since occasionally the cron will go down on the main server but there are no errors. Can anyone help with a script to write to use the cron on the back up machine to monitor the main server? I am using SCO and the cron jobs have been... (3 Replies)
Discussion started by: rmarral
3 Replies

10. UNIX for Dummies Questions & Answers

CRON Jobs

Hi, I am a total newbie to all things Unix. I've worked out I need to set up something that will allow me to automatically backup a DB for me, the DB is for a foum system I run. Now, I've only found out I need to use telnet for this, and worked out hwo to log into telnet today. From here... (4 Replies)
Discussion started by: eludlow
4 Replies
Login or Register to Ask a Question