CTKlib
view release on metacpan or search on metacpan
lib/CTK/App.pm view on Meta::CPAN
# Autoloading logger (settings data from config only, no use logmode!!)
my $log_on = lvalue($config->get("logenable")) || lvalue($config->get("logenabled")) || 0;
if ($log_on && !$args->{no_logger_init}) {
my $logopts = $args->{logopts} || {};
my $logfile = defined($args->{logfile}) ? $self->logfile : lvalue($config->get("logfile")); # From args or config
$logopts->{facility} = $args->{logfacility} if defined($args->{logfacility}); # From args only!
$logopts->{file} = $logfile if defined($logfile) && length($logfile);
$logopts->{ident} = defined($args->{ident})
? $args->{ident}
: (lvalue($config->get("logident")) // $self->project); # From args or config
$logopts->{level} = defined($args->{loglevel})
? $args->{loglevel}
: lvalue($config->get("loglevel")); # From args or config
$self->logger_init(%$logopts) or do {
$self->error("Can't initialize logger");
$self->{status} = 0;
};
}
return $self;
lib/CTK/Daemon.pm view on Meta::CPAN
=item *
Daemon restart on error
=item *
Handle worker processes
=item *
Run as different user using setuid/setgid
=back
=head2 METHODS
=over 8
=item new
my $daemon = CTK::Daemon->new('testdaemon', (
ctk => CTK::App->new(...), # Or create CTKx instance first
debug => 1, # Default: 0
loglevel => "debug", # Default: undef
forks => 3, # Default: 1
uid => "username", # Default: undef
gid => "groupname", # Default: undef
saferun => 0, # Set to 1 to enable safe mode for the run method calling
));
Daemon constructor
=item ctk, get_ctk
my $ctk = $daemon->get_ctk;
Returns CTK object
lib/CTK/Daemon.pm view on Meta::CPAN
ctk => $ctk,
ppid => 0,
pidfile => $pidfile,
initpid => $$,
initpidf => $pidf,
initpidstat => $pidstat, # From pid file!
masterpid => undef,
workerpid => undef,
workerident => undef,
sigs => $sigs,
gid => $params{gid} || undef,
uid => $params{uid} || undef,
forkers => $forkers,
saferun => $params{saferun} || 0,
debug => $debug,
loglevel => $loglevel,
logger => undef,
socketopts => $params{socketopts},
syslogopts => $params{syslogopts},
lib/CTK/Daemon.pm view on Meta::CPAN
#
# LSB methods
#
sub start {
my $self = shift;
my $logger = $self->logger;
# Load GID and UID
my ($uid, $gid);
if (my $uidstr = $self->{uid}) {
$uid = getpwnam($uidstr) || croak "getpwnam failed - $!\n";
}
if (my $gidstr = $self->{gid}) {
$gid = getgrnam($gidstr) || croak "getgrnam failed - $!\n";
}
# PidFile prepare
if (defined($uid) or defined($gid)) {
my $pidfile = $self->{pidfile};
unless (-e $pidfile) {
CTK::Util::fsave($pidfile, "0\n");
chown($uid, $gid, $pidfile) if -e $pidfile;
}
}
# Set GID and UID
if (defined($gid)) {
POSIX::setgid($gid) || croak "setgid $gid failed - $!\n";
$) = "$gid $gid"; # this calls setgroups
croak "detected strange gid\n" if !($( eq "$gid $gid" && $) eq "$gid $gid"); # just to be sure
}
if (defined($uid)) {
POSIX::setuid($uid) || croak "setuid $uid failed - $!\n";
croak "detected strange uid\n" if !($< == $uid && $> == $uid); # just to be sure
}
my $save_pid = $$;
#say "PID> $$";
#say "INITPID> ".$self->{initpid};
my $pidf = $self->{initpidf};
( run in 2.707 seconds using v1.01-cache-2.11-cpan-5735350b133 )