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 )