Logic-Tools
view release on metacpan or search on metacpan
lib/Logic/Tools.pm view on Meta::CPAN
$log->debug("$logstring");
}
elsif($loglevel eq "info")
{
$log->info("$logstring");
}
elsif($loglevel eq "notice")
{
$log->notice("$logstring");
}
elsif($loglevel eq "notice")
{
$log->notice("$logstring");
}
elsif($loglevel eq "warning")
{
$log->warning("$logstring");
}
elsif($loglevel eq "error")
{
$log->error("$logstring");
}
elsif($loglevel eq "critical")
{
$log->critical("$logstring");
}
elsif($loglevel eq "alert")
{
$log->alert("$logstring");
}
elsif($loglevel eq "emergency")
{
$log->emergency("$logstring");
}
return 1;
}
sub start_daemon
{
$SIG{CHLD} = 'IGNORE';
my $self = shift;
my $runas_user=$self->{'runas_user'};
my $lock_file=$self->{'lock_file'};
my ($name, $passwd, $uid, $gid) = getpwnam($runas_user) or die "[FAILED] Ðевозможно запÑÑÑиÑÑÑÑ Ð¿Ð¾Ð´ $runas_user";
my $pid = fork();
die "[FAILED] Ðе ÑдаеÑÑÑ ÑоздаÑÑ ÑоÑк: $!" unless(defined($pid));
if($pid)
{
# ÐапиÑÑ Ñайле блокиÑовки
open(my $pid_file, ">" ,$lock_file) || die "[FAILED] Ðе ÑдалоÑÑ ÑоздаÑÑ Ñайл блокиÑовки $lock_file\n";
print $pid_file "$pid";
close $pid_file;
chown $uid, $gid, $lock_file;
exit;
}
else
{
# daemon
setpgrp();
select(STDERR); $| = 1;
select(STDOUT); $| = 1;
#syslog(LOG_INFO, "---------------------------------------");
#syslog(LOG_INFO, "СкÑÐ¸Ð¿Ñ Ð·Ð°Ð¿ÑÑен");
}
# СбÑÐ¾Ñ Ð¿Ñивилегий
setuid($uid);
$< = $uid;
$> = $uid;
return 1;
}
#ÑÑаÑÑ Ð´ÐµÐ¼Ð¾Ð½Ð° ÑÑпеÑвизоÑом
#пеÑвÑй поÑожденнÑй пид
my $first_child_pid=0;
sub supervisor_start_daemon
{
$SIG{INT} = \&close_prog;
$SIG{QUIT} = \&close_prog;
$SIG{TERM} = \&close_prog;
$SIG{CHLD} = 'IGNORE';
my $self = shift;
my $runas_user=$self->{'runas_user'};
my $lock_file=$self->{'lock_file'};
my ($name, $passwd, $uid, $gid) = getpwnam($runas_user) or die "[FAILED] can't start under the $runas_user";
$first_child_pid = fork();
die "[FAILED] can't create fork: $!" unless(defined($first_child_pid));
if($first_child_pid)
{
# ÐапиÑÑ Ñайле блокиÑовки
open(my $pid_file, ">" ,$lock_file) || die "[FAILED] can't create block file $lock_file\n";
print $pid_file "$first_child_pid";
close $pid_file;
chown $uid, $gid, $lock_file;
while(1)
{
# ÐÑоÑеÑÑ Ð·Ð°Ð¿ÑÑен, но акÑивного пÑоÑеÑÑа Ñ ÑказаннÑм PID неÑ
unless( -e "/proc/$first_child_pid" )
{
die "child $first_child_pid dead, exit\n";
exit;
}
sleep(1);
}
}
else
{
# daemon
setpgrp();
select(STDERR); $| = 1;
select(STDOUT); $| = 1;
}
# СбÑÐ¾Ñ Ð¿Ñивилегий
setuid($uid);
$< = $uid;
$> = $uid;
}
sub close_prog
{
#оÑпÑавка Ñигнала завеÑÑÐµÐ½Ð¸Ñ Ð´Ð¾ÑеÑÐ½ÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ
kill("TERM",$first_child_pid);
die "TERM signal recieved\n";
exit;
}
=head1 AUTHOR
lagutas, C<< <lagutas at gmail.com> >>
=head1 BUGS
Please report any bugs or feature requests to C<bug-logic-tools at rt.cpan.org>, or through
the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Logic-Tools>. I will be notified, and then you'll
automatically be notified of progress on your bug as I make changes.
=head1 SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Logic::Tools
You can also look for information at:
=over 4
=item * RT: CPAN's request tracker (report bugs here)
( run in 1.421 second using v1.01-cache-2.11-cpan-71847e10f99 )