Author: fapeeler Date: Wed Jul 14 20:30:19 2010 New Revision: 964187 URL: http://svn.apache.org/viewvc?rev=964187&view=rev Log: VCL-149
added semaphore lock on /var/lock/subsys/vcld file in the daemonize routine if a running vcld process is active and attempts to start a second process will not succeed Modified: incubator/vcl/trunk/managementnode/bin/vcld Modified: incubator/vcl/trunk/managementnode/bin/vcld URL: http://svn.apache.org/viewvc/incubator/vcl/trunk/managementnode/bin/vcld?rev=964187&r1=964186&r2=964187&view=diff ============================================================================== --- incubator/vcl/trunk/managementnode/bin/vcld (original) +++ incubator/vcl/trunk/managementnode/bin/vcld Wed Jul 14 20:30:19 2010 @@ -774,16 +774,34 @@ sub daemonize { chdir '/' or die "Can't chdir to /: $!"; defined(my $pid = fork) or die "Can't fork $!"; exit if $pid; - print "Created VCL daemon process: $$\n"; - setsid or die "Can't start a new session: $!"; - open STDIN, '/dev/null' or die "Can't read /dev/null $!"; - open STDOUT, ">>$LOGFILE" or die "Can't write $LOGFILE $!"; - open STDERR, ">>$LOGFILE" or die "Can't write $LOGFILE $!"; - setsid or die "Can't start a new session: $!"; - umask 0; - open(PIDFILE, ">" . $PIDFILE) or notify($ERRORS{'WARNING'}, $LOGFILE, "unable to open PID file: $PIDFILE, $!"); # so I can kill myself easily - print PIDFILE $$; - close(PIDFILE); + + #Create EX lock on lockfile + my $subsys_lock = "/var/lock/subsys/$PROCESSNAME"; + sysopen(LOCKFILE, $subsys_lock, O_RDONLY | O_CREAT ) or die "unable to open lock file: $PIDFILE \n"; + + unless(flock(LOCKFILE, LOCK_EX|LOCK_NB)){ + #write to log file + notify($ERRORS{'WARNING'}, $LOGFILE, " An process instance of $PROCESSNAME is already running "); + # print to STDERR + print STDERR "\nFailed to start.\n\nAn instance of $PROCESSNAME is already running\n\n"; + exit; + } + + umask 0; + setsid or die "Can't start a new session: $!"; + + # write pid to pidfile + open(PIDFILE, ">" . $PIDFILE) or notify($ERRORS{'WARNING'}, $LOGFILE, "unable to open PID file: $PIDFILE, $!"); + print PIDFILE $$ ; + close(PIDFILE); + + #Redirect STDIN,STDOUT,STDERR + open STDIN, '/dev/null' or die "Can't read /dev/null $!"; + open STDOUT, ">>$LOGFILE" or die "Can't write $LOGFILE $!"; + open STDERR, ">>$LOGFILE" or die "Can't write $LOGFILE $!"; + + print "Created VCL daemon process: $$\n"; + } ## end sub daemonize #/////////////////////////////////////////////////////////////////////////////