The UNIX and Linux Forums  

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
Google UNIX.COM


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts here.

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Please send activation mail.. bvijaycom Forum Support Area for Unregistered Users & Account Problems 1 05-19-2008 01:18 AM
Activation jamalwil7 Forum Support Area for Unregistered Users & Account Problems 0 05-15-2008 12:20 PM
Account Activation Problem MIKU Forum Support Area for Unregistered Users & Account Problems 1 08-09-2007 02:17 AM
Did not receive activation mail pl_cyber Forum Support Area for Unregistered Users & Account Problems 0 05-29-2007 08:09 PM
Wireless ipw2200 activation XinU* UNIX for Advanced & Expert Users 4 01-21-2007 09:25 AM

Reply
 
Submit Tools LinkBack Thread Tools Display Modes
  #1 (permalink)  
Old 02-03-2008
Registered User
 

Join Date: Sep 2006
Location: Sg
Posts: 316
Stumble this Post!
Cronjob Activation

Hi All,

I have set a cronjob to run a script at a frequency of 10 mins.
However, if the script takes more than 10 mins to complete, how will the cronjob behaves?
1) Does it ignore the current process and restart the whole process again?
2) Or does it stop to trigger the script again unless previous process has been completed?
Reply With Quote
Forum Sponsor
  #2 (permalink)  
Old 02-03-2008
Smiling Dragon's Avatar
Disorganised User
 
Join Date: Nov 2007
Location: New Zealand
Posts: 709
Stumble this Post!
Post

Quote:
Originally Posted by Raynon View Post
Hi All,

I have set a cronjob to run a script at a frequency of 10 mins.
However, if the script takes more than 10 mins to complete, how will the cronjob behaves?
1) Does it ignore the current process and restart the whole process again?
2) Or does it stop to trigger the script again unless previous process has been completed?
Depends on your cron implementation but generally it will run another copy of the script 10 mins after the first one is started - regardless of how long the first run takes.

Solutions:
  • Make your script reentrant - ie write it such that it running multiple times at once isn't a problem.
  • Make your script aware of how many times it's currently running - ie create a lock file when it starts up and check for this every time you start.
  • Don't use cron, have the script run continuously and manage it's own scheduling - ie sleep 600
  • Don't use cron, get a better scheduler - depending on your enviornment, this could be something like anacron or control-m.
Reply With Quote
  #3 (permalink)  
Old 02-04-2008
Registered User
 

Join Date: Sep 2006
Location: Sg
Posts: 316
Stumble this Post!
Quote:
Originally Posted by Smiling Dragon View Post
Depends on your cron implementation but generally it will run another copy of the script 10 mins after the first one is started - regardless of how long the first run takes.

Solutions:
  • Make your script reentrant - ie write it such that it running multiple times at once isn't a problem.
  • Make your script aware of how many times it's currently running - ie create a lock file when it starts up and check for this every time you start.
  • Don't use cron, have the script run continuously and manage it's own scheduling - ie sleep 600
  • Don't use cron, get a better scheduler - depending on your enviornment, this could be something like anacron or control-m.

Hi,

Running the script continously means to say that i have to leave a command prompt window always open. Once closed, the process will be ended, and also another disadvantage is that a infinite looping script will eat up alot of resources, wouldn;t it ?
So i still think cron is the more practical one. But i have no idea about anacron or control-m. Can you enlightened me on that ?

Can you give an example of script being re-entrant ?
I was thinking if i could make the script check for the process to see if the previous process have been completed, can any experts give me some examples of this ? I am using csh by the way.
Reply With Quote
  #4 (permalink)  
Old 02-06-2008
Smiling Dragon's Avatar
Disorganised User
 
Join Date: Nov 2007
Location: New Zealand
Posts: 709
Stumble this Post!
Quote:
Originally Posted by Raynon View Post
Running the script continously means to say that i have to leave a command prompt window always open. Once closed, the process will be ended
Not at all, just move it to the background, no different to all the other daemonised stuff you are running on your system. If it likes to write to STDOUT, redirect this to a log file (or /dev/null if you prefer).
Quote:
Originally Posted by Raynon View Post
and also another disadvantage is that a infinite looping script will eat up alot of resources, wouldn;t it ?
Much as before, no problems here either. Just use sleep at the bottom of the loop to stop it thrashing.
Quote:
Originally Posted by Raynon View Post
So i still think cron is the more practical one.
Your call of course.
Quote:
Originally Posted by Raynon View Post
But i have no idea about anacron or control-m. Can you enlightened me on that ?
Anacron is a slighty more advanced version of cron, may or may not do what you want. Free (I think)
Control-M is a BMC product that manages scheduling at an enterprise level, it supports job dependancies, understands limited resources and works across multiple platforms. Costs a bit.

Google for more info on these
Quote:
Originally Posted by Raynon View Post
Can you give an example of script being re-entrant ?
Reentrant just means that it can be run multiple times at once without going wonky. One example:
Not rentrant:
Code:
#!/bin/sh
/usr/bin/do_some_stuff > /var/log/did_some_stuff.log
do some other things
if grep 'it worked' /var/log/did_some_stuff.log
then
  /usr/sbin/assume_we_are_good_to_go
else
  echo "Argh"
fi
Reentrant:
Code:
#!/bin/sh
/usr/bin/do_some_stuff > /var/log/did_some_stuff.$$.log
do some other things
if grep 'it worked' /var/log/did_some_stuff.$$.log
then
  /usr/sbin/assume_we_are_good_to_go
else
  echo "Argh"
fi
rm /var/log/did_some_stuff.$$.log
The first example could end up reading back the log of a different instance of itself. The second version includes the current process ID in the log file which prevents this happening.

Another, simpler, way is to just look in the process table for another copy of the script, if found exit immediatly.

Quote:
Originally Posted by Raynon View Post
I was thinking if i could make the script check for the process to see if the previous process have been completed, can any experts give me some examples of this ? I am using csh by the way.
(Assuming system V as opposed to bsd)
Code:
#!/bin/csh
set numprocs=`ps -ef | grep -v grep | grep $scriptname | wc -l | awk '{ print $1 }'`
if ($numprocs == 1) then
    # carry on
else
   echo "Another instance is already running, exiting..."
   exit 0
endif
Reply With Quote
  #5 (permalink)  
Old 02-12-2008
Registered User
 

Join Date: Sep 2006
Location: Sg
Posts: 316
Stumble this Post!
Hi ,

I am refering to this particular exmaple that you have provided me.

Code:
#!/bin/csh
set numprocs=`ps -ef | grep -v grep | grep $scriptname | wc -l | awk '{ print $1 }'`
if ($numprocs == 1) then
    # carry on
else
   echo "Another instance is already running, exiting..."
   exit 0
endif
What is the significance of the numprocs?
If it equals to 1 , why does it show that the script is not running anymore?

I tried a simple csh script below and it doesn;t really work.
When it is sleeping, the name of the script which is "myscriptname" is not reflected during " ps -ef ", it only shows " usr 28951 28941 0 15:00:39 pts/7 0:00 sleep 100 ".

Can you help ?

Code:
#!/bin/csh

echo xxx
echo ppp 
echo zzz

sleep 100
Reply With Quote
  #6 (permalink)  
Old 02-13-2008
Smiling Dragon's Avatar
Disorganised User
 
Join Date: Nov 2007
Location: New Zealand
Posts: 709
Stumble this Post!
Quote:
Originally Posted by Raynon View Post
I am refering to this particular exmaple that you have provided me.
Code:
#!/bin/csh
set numprocs=`ps -ef | grep -v grep | grep $scriptname | wc -l | awk '{ print $1 }'`
if ($numprocs == 1) then
    # carry on
else
   echo "Another instance is already running, exiting..."
   exit 0
endif
What is the significance of the numprocs?
If it equals to 1 , why does it show that the script is not running anymore?
Because one copy is running, the one that's currently executing. It's looking for another version of itself (ie 2 or more) in case there are other copies still running.
Quote:
Originally Posted by Raynon View Post
I tried a simple csh script below and it doesn;t really work.
When it is sleeping, the name of the script which is "myscriptname" is not reflected during " ps -ef ", it only shows " usr 28951 28941 0 15:00:39 pts/7 0:00 sleep 100 ".
Works for me, when I run a csh script with a sleep in it, I see the sleep, _and_ the main script running.
Reply With Quote
Google The UNIX and Linux Forums
Reply

Thread Tools
Display Modes




All times are GMT -7. The time now is 11:57 PM.


Powered by: vBulletin, Copyright ©2000 - 2006, Jelsoft Enterprises Limited.
The UNIX and Linux Forums Content Copyright ©1993-2008 The CEP Blog All Rights Reserved -Ad Management by RedTyger Visit The Global Fact Book

Content Relevant URLs by vBSEO 3.2.0