App-MonM
view release on metacpan or search on metacpan
use App::MonM::Const;
my $options = {};
Getopt::Long::Configure ("bundling");
GetOptions($options,
# NoUsed keys map:
#
# a A b B C D e E
# f F g G i I j J
# K l L m M n N o O
# p P q Q r R S T
# u U w W x X y Y
# z Z
# Information and debug
"help|usage|h", # Show help page
"longhelp|H|?", # Show long help page
"version|vers|ver|V", # Print VERSION of the project
"verbose|v", # Verbose mode
"safemode|s", # Safe mode (saferun)
# CTK Application
"config|conf|c=s", # Config file
"datadir|dir|d=s", # DataDir
"kill|k=s", # Kill (signal name)
) || pod2usage(-exitval => 1, -verbose => 0, -output => \*STDERR);
pod2usage(-exitval => 0, -verbose => 1) if $options->{help};
pod2usage(-exitval => 0, -verbose => 2) if $options->{longhelp};
printf("Daemon version: %s\n", App::MonM::Daemon->VERSION) && exit(0) if $options->{version};
my @arguments = @ARGV ? @ARGV : ();
my $exitval = 0;
# Dash k - is daemon mode!
my $dash_k = $options->{kill};
pod2usage(-exitval => 1, -verbose => 0, -output => \*STDERR)
unless ($dash_k && grep {$_ eq $dash_k} @{(CTK::Daemon::LSB_COMMANDS())});
# CTK Singleton instance
my $ctk = CTK::App->new(
project => PROJECTNAME,
prefix => PREFIX,
options => $options,
verbose => $options->{verbose},
logfacility => Sys::Syslog::LOG_DAEMON,
ident => DAEMONMAME,
datadir => $options->{datadir} || File::Spec->catdir(sharedstatedir(), PREFIX), # /var/lib/monm
$options->{config} ? (configfile => $options->{config}) : (),
);
# Prepare work directory
my $ddir = $ctk->datadir;
exit 1 unless CTK::Util::preparedir( $ddir );
# User and Group
my $usr = lvalue($ctk->config("daemonuser")) || USERNAME;
my $grp = lvalue($ctk->config("daemongroup")) || GROUPNAME;
# Set permisions (GID and UID) for work directory
my $uid = getpwnam($usr) || die "getpwnam failed - $!\n";
if ((stat($ddir))[4] != $uid) {
my $gid = getgrnam($grp) || die "getgrnam failed - $!\n";
chown($uid, $gid, $ddir);
}
# Daemon
my $daemon = App::MonM::Daemon->new(DAEMONMAME,
ctk => $ctk,
forks => lvalue($ctk->config("workers")) || App::MonM::Daemon::DAEMONFORKS,
uid => $usr,
gid => $grp,
saferun => $options->{safemode},
);
$exitval = $daemon->ctrl($dash_k); # For exiting
exit $exitval;
__END__
( run in 2.989 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )