spikesource hints'n'tips

Our Top Tags

                                       

Mailing List

Keep uptodate with the latest hints'n' tips as they are published by signing up to our mailing list.

Our RSS Feeds








Latest Linux News

20 Beautiful Dark Themes for Gnome and Ubuntu

Tuesday, 19 August 2008
Cats Who Code: "Some weeks ago, I shown you a list of 30 themes for enhancing your Gnome desktop."

OpenSolaris: a Linux Admin's View

Tuesday, 19 August 2008
Linux Format: "Sun is battling hard to break into the open source operating system world with OpenSolaris. Juliet Kemp takes it for a test-drive, sampling its unique features and seeing how it fares a

What's That They Say About Assumptions?

Tuesday, 19 August 2008
Blog of Helios: "Sometimes Linux isn't the answer."

The Brampton Factor: Analysts Fail on Open Source

Tuesday, 19 August 2008
IT Pro: "For open source software to achieve its full potential, people's perceptions must change. Yet how can that happen when open source is so woefully neglected by analysts, asks Martin Brampton."

Why Red Hat Invested In JBoss Instead Of Linux Desktops

Tuesday, 19 August 2008
The VAR Guy: "Ever wonder why Red Hat spends so much time focused on the JBoss middleware market and so little time trying to make Linux a desktop standard? The answer involves some simple but startli

Latest Digg Entries

How do I make sure my script isn't already running before it attempts to run again?

posted Thursday, 18 August 2005
It is not uncommon to put housekeeping tasks in a cron job to be run every x minutes or hours. The cron utility has no notion of task completion, it merely starts a new thread/process irrespective of the state of the last one. In some situations this is not desirable as a script may not have completed before it is called upon to execute again.

You can control this using a simple lock file signal. The script checks to see if there is a file present and if so, doesn't run the bulk of the script again. If the lock file doesn't exist, it creates one, runs its tasks, and then deletes the lock file again.

See example below

if [ -f /tmp/mylockFile ] ; then

  echo 'Script is still running'

else

  echo 1 > /tmp/mylockFile

  /* Do the main processing of your script in here */

  rm -f /tmp/mylockFile

fi

tags:    

links: digg this    del.icio.us    technorati    




1. F1L1pP0S left...
Wednesday, 5 April 2006 12:35 pm

my script it is very great


2. Kirby Files left...
Wednesday, 7 November 2007 4:42 pm

Well, I think this post is well-intentioned, but raises more issues than it solves.

1) Blindly believing a lock-file without checking if it belongs to a live process means that a single failure can permanently block your script from running.

2) Using /tmp for lockfiles is incredibly insecure, since an adversary can create the file there, and either block the execution of your script, or worse, if you read from the file, take advantage of any insecurity in your program to execute arbitrary code.

For (1), the solution is to write your process-id (pid) to the lockfile, and then check for the existence of that process when starting a new script:

LOCKDIR=/var/log/subsys LOCK=$LOCKDIR/$SCRIPTNAME echo $$ > $LOCK

and then to check if the previous script is still running:

function running() {

  • #echo Checking pidfile $pidfile

  • if ; then

    • pid=cat $LOCK

    • procfile=/proc/$pid

    • if ; then

      • true

      • return

    • fi

  • fi

  • false

}

As for (2), linux distros now generally default to using /var/lock/subsys for root processes. Check your platform for the acceptable lock directory. In general, picking a lock directory writable only by the user executing the script is key.

Thanks,

  • --kirby


Related Posts

How to convert a string to upper or lower case in bash?

Monday, 2 October 2006 2:46 P GMT
How to convert a string to upper or lower case in bash?

How can I start a Java process and retain its process id?

Monday, 2 October 2006 2:41 P GMT
How can I start a Java process and retain its process id?

Using Fetchmail to forward email

Monday, 2 October 2006 2:29 P GMT
Fetchmail is a remote-mail retrieval and forwarding utility. This article describes how it can be set up to forward emails from a particular folder to another mailbox.

Handling different Java runtimes on a single machine

Thursday, 14 September 2006 10:48 A GMT
This entry takes a quick look at how you can best utilise different Java JVMs on the linux using a couple of techniques.

How to stop /etc/resolv.conf from being changed by DHCP?

Thursday, 7 September 2006 3:55 P GMT
Show how to keep /etc/resolv.conf unchanged when using DHCP.

How do can I tell if my network is receiving/sending multicast packets?

Tuesday, 5 September 2006 2:51 P GMT
If you are coding a multicast network application and want to make sure you are receiving muticast udp packets you can use the tcpdump linux utility. This entry shows you how.

How to clear shell command path cache?

Tuesday, 5 September 2006 1:57 P GMT
Way to clear the cached paths for various commands on bourne-like shells.

Detecting to see if a mail server is still alive using a simple shell script

Thursday, 31 August 2006 2:05 P GMT
This entry looks at using the Linux utility, nc, for determining if a given mail server is alive. You can easily adapt it for other servers.

How do I create a file of any given size on Linux?

Wednesday, 30 August 2006 2:52 P GMT
Using the dd command it is possible to create files of arbitrary lengths.

Installing RealPlayer and video codecs on Ubuntu

Wednesday, 30 August 2006 2:43 P GMT
Explain how you install RealPlayer under Ubuntu.

Does your cron script run in a bash shell, but not while running under crontab?

Tuesday, 22 August 2006 7:28 A GMT
This article explains why some scripts run correctly from a bash shell, but behave differently running from the crontab.

How do I get the canonical path for a symlink target?

Monday, 21 August 2006 1:01 P GMT
Getting canonical path for a symlink in Linux

How to find out what application is using your port

Thursday, 15 September 2005 8:00 A GMT
How to find out what application is using your port

Use Samba to Map a Linux Directory to a Windows Drive

Tuesday, 13 September 2005 4:03 P GMT
Samba is used for sharing source code and software binary between windows and linux in Windows test uploading support project.

Listing open files in linux / unix system

Thursday, 25 August 2005 6:06 P GMT
If you are working in a unix system, sometime it is not obvious if a file is being opened by some other processes or not. You can get a list of all open files by using lsof command.

How do I make sure my script isn't already running before it attempts to run again?

Thursday, 18 August 2005 7:17 P GMT
How do I make sure my script isn't already running before it attempts to run again?

CEO Kim Polese interviewed by SearchEnterpriseLinux

Wednesday, 29 June 2005 1:12 P GMT
In this SearchEnterpriseLinux.com interview, she talks about how companies are leveraging the open source model to enhance their bottom lines.