[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ale] Only one process



Doesn't anybody worry about race conditions any more?  How do you
defend against multiple copies of this script running simultaneously?
Of course, cron *shouldn't* ever do that...

flock(1) seems relevant:

http://linux.die.net/man/1/flock

-- JK


On 6/4/2010 11:52 AM, James Sumners wrote:
> This is a situation where I typically take advantage of screen. If you
> tell screen to execute a process, then screen will exit when said
> process quits. For example, `screen bash false` results in screen
> starting and quitting immediately. Therefore, you can do the
> following:
>
> ===== Begin script =====
> #!/bin/bash
>
> SESSION_NAME="myapp"
>
> screen -list | grep ${SESSION_NAME}>  /dev/null
> case $? in
>      [0]*)
>          # screen is already running
>          exit 1;;
>      [1]*)
>          # need to run this thing
>          screen -dmS ${SESSION_NAME} bash -c /path/to/myapp
>          ;;
> esac
> ===== End Script =====
>
> Then you can set a cron job to run this thing every once in a while.
>
> On Fri, Jun 4, 2010 at 1:11 PM, Chris Fowler
> <cfowler at outpostsentinel.com>  wrote:
>> I've been thinking of ways to guarantee that there is only one process
>> of a script running.
>>
>> pid file
>>
>> process looks for pid file.  If it sees one it validates that there
>> truly is a process at the pid.  If not, it creates new pid file and
>> runs.  If so, it sends out error message and exits.
>>
>> The script is in perl so the what this would work is?
>>
>> if(-f $pid_file) {
>>         # Get the pid info
>>         my $pid = `cat $pid_file`;chomp $pid;
>>
>>         # look for process running
>>         if(-f "/proc/$pid/cmdline") {
>>           # We may want to look at cmdline and validate it is really
>>           # this script and not just a reused pid #
>>           die "Process running at $pid already!\n";
>>         } else {
>>           unlink "$pid_file";
>>         }
>>
>> }
>>
>> # Ready to go!
>>
>>
>> I'm just looking for what would be considered "The Right Way(tm)"
>>
>> Chris
>
>


-- 
Forget Jesus: stars died so that you could be here today.
  - physicist Lawrence Krauss