#!/usr/bin/perl -w # lockerd - distributed lock handler for perl IPC::Locker # $Id: lockerd 71 2007-05-03 22:56:52Z wsnyder $ # Wilson Snyder ################ Introduction ################ # # Copyright 1999-2007 by Wilson Snyder. This program is free software; # you can redistribute it and/or modify it under the terms of either the GNU # General Public License or the Perl Artistic License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # ###################################################################### require 5.004; use lib './blib/lib'; # testing use Getopt::Long; use Pod::Usage; use IPC::Locker::Server; use strict; BEGIN { $ENV{PATH} = '/usr/ucb:/bin' } # Secure path ###################################################################### # configuration ###################################################################### # globals use vars qw($Pid); ###################################################################### # main my $Debug = 0; my %server_params = (); if (!GetOptions ( "help" => \&usage, "debug" => \&debug, "version" => \&version, "port=i" => sub {$server_params{port} = $_[1];}, "path=s" => sub {$server_params{port} = $_[1]; $server_params{family}='UNIX';}, )) { die "%Error: Bad usage, try 'lockerd --help'\n"; } # Must be after we've done --help $0 = 'lockerd'; # So ps and pidof can find this daemon # Loop in case something kills us $SIG{HUP} = \&sig_HUP; $SIG{CHLD} = \&sig_HUP; while (1) { print "Starting server\n" if $Debug; unless ($Pid = fork) { IPC::Locker::Server->new(%server_params)->start_server (); exit(0); } waitpid($Pid,0) if $Pid; warn "%Warning: Server aborted\n" if $Debug; sleep(1); kill 9, $Pid if $Pid; $Pid = 0; sleep(1); } exit (0); sub sig_HUP { kill 9, $Pid if $Pid; $Pid = 0; } ###################################################################### sub usage { print '$Id: lockerd 71 2007-05-03 22:56:52Z wsnyder $ ', "\n"; pod2usage(-verbose=>2, -exitval => 2); exit(1); } sub version { print 'Version: $Id: lockerd 71 2007-05-03 22:56:52Z wsnyder $ '; print "\n"; exit (1); } sub debug { $Debug = 1; $IPC::Locker::Server::Debug = 1; $IPC::PidStat::Debug = 1; } ###################################################################### __END__ =pod =head1 NAME lockerd - Distributed lock handler for Perl IPC::Locker =head1 SYNOPSIS B [ B<--help> ] [ B<--port=>I ] [ B<--path=>I ] [ B<--version> ] =head1 DESCRIPTION Lockerd will start a daemon to watch for and service connects by the Perl IPC::Locker package. =head1 ARGUMENTS =over 4 =item --help Displays this message and program version and exits. =item --port Specifies the port number to be used. =item --path Specifies that UNIX FIFO will be used for communications with clients and the path to the FIFO. =item --version Displays program version and exits. =back =head1 DISTRIBUTION The latest version is available from CPAN and from L. Copyright 1999-2007 by Wilson Snyder. This package is free software; you can redistribute it and/or modify it under the terms of either the GNU Lesser General Public License or the Perl Artistic License. =head1 AUTHORS Wilson Snyder =head1 SEE ALSO L, L =cut ######################################################################