On Wed, 9 Dec 2009 11:43:44 -0800 (PST)
cerr <[email protected]> wrote:
> Hi There,
>
> I use below code to make sure i have only one instance of my script
> running at a time. But weirdly enough i sometimes seem to have running
> two instances. This script is getting called on a regular basis by a
> cron job and may take a long time (30+min)to complete but still...I
> can't figure out what would be wrong with this code, anyone?
>
> #[PID]
> #Check if PID file already exists
> if ( -s $PIDloc){
> print "THERE IS ALREADY AN INSTANCE OF UPDATESERVER RUNNING\n
> check \"".$PIDloc."\"\n";
> syslog('info',"THERE IS ALREADY AN INSTANCE OF UPDATESERVER
> RUNNING \n check \"".$PIDloc."\"");
> exit(999);
> }
> #if it doesn't exist, create it (gets ereased atr the bottom of MAIN
> on completion)
> my $pid = $$;
> open my $fd,'>', $PIDloc or die $!;
> print $fd $pid;
> close $fd or die $!;
> #[/PID]
Sorry I'm a bit late on this, but I have successfully used this snippet
to check for a process, starts it if it doesn't exist, kills it if it
does.
=============================================
#!/usr/bin/perl -w
use strict;
my $program = "myprogram";
my $status = `/bin/ps cat | /bin/grep $program`;
if ( length($status) > 0 ) {
$status =~ /(^\d+)/;
print "$1\n"; #extract pid from here
exec "kill -9 $1"
}
else { exec "/path/to/myprogram" } # start program
=============================================
You maybe able to adapt it for your needs. EG, delete the PID file if
the program is running.
Owen
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/