CTKlib
view release on metacpan or search on metacpan
lib/CTK/Daemon.pm view on Meta::CPAN
));
my $status = $daemon->ctrl("start");
$daemon->exit_daemon($status);
1;
package My::Class;
use base qw/CTK::Daemon/;
sub new {
my $class = shift;
# ... your code ...
$class->SUPER::new(shift, @_);
}
sub run {
my $self = shift;
my $logger = $self->logger;
$logger->log_info("Code is running");
my $step = 5;
while ($self->ok) { # Check it every time
# If occurred usual error:
# $logger->log_error("...");
# mysleep SLEEP;
# next;
# If occurred exception error
# $logger->log_crit("...");
# $self->exception(1);
# last;
# For skip this loop
# $self->skip(1);
# next;
last unless $self->ok; # Check it every time (after loop too)
} continue {
CTK::Daemon::mysleep $step if $step; # Delay! For avoid fast restarts
}
return 1;
}
1;
AnyEvent example (better):
package My::Class;
use base qw/CTK::Daemon/;
use AnyEvent;
sub run {
my $self = shift;
my $logger = $self->logger;
my $quit_program = AnyEvent->condvar;
# Create watcher timer
my $watcher = AnyEvent->timer (after => 3, interval => 3, cb => sub {
$quit_program->send unless $self->ok;
});
# Create process timer
my $timer = AnyEvent->timer(after => 3, interval => 15, cb => sub {
$quit_program->send unless $self->ok;
$logger->log_info("[%d] Worker is running #%d", $self->{workerident}, $self->{workerpid});
});
# Run!
$quit_program->recv;
return 1;
}
1;
=head1 HISTORY
=over 8
=item B<1.00 Mon Feb 27 12:33:51 2017 GMT>
Init version
=item B<1.01 Mon 13 May 19:53:01 MSK 2019>
Moved to CTKlib project
=back
See C<Changes> file
=head1 DEPENDENCIES
L<CTK>, L<POSIX>, L<Sys::Syslog>, L<Try::Tiny>
=head1 TO DO
See C<TODO> file
=head1 BUGS
* none noted
=head1 SEE ALSO
L<CTK>, L<POSIX>
=head1 AUTHOR
Serż Minus (Sergey Lepenkov) L<https://www.serzik.com> E<lt>abalama@cpan.orgE<gt>
=head1 COPYRIGHT
Copyright (C) 1998-2022 D&D Corporation. All Rights Reserved
Based on PVE::Daemon ideology
=head1 LICENSE
This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.
( run in 0.713 second using v1.01-cache-2.11-cpan-39bf76dae61 )