1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
|
package Linux::Systemd::Daemon 1.201600;
# ABSTRACT: Systemd daemon API
use v5.16;
use strictures 2;
use Exporter 'import';
use XSLoader;
our @EXPORT = qw/sd_notify/;
our @EXPORT_OK =
qw/sd_notify sd_ready sd_stopping sd_reloading sd_status sd_watchdog/;
our %EXPORT_TAGS =
(all =>
[qw/sd_notify sd_ready sd_stopping sd_reloading sd_status sd_watchdog/]);
XSLoader::load;
# TODO optimise by pushing this into the XS
# *sd_notify = \&Linux::Systemd::Daemon::notify;
sub sd_notify {
my %hash = @_;
my $str;
for my $k (keys %hash) {
$str .= uc($k) . "=$hash{$k}\n";
}
return notify($str);
}
sub sd_watchdog {
return notify('WATCHDOG=1');
}
sub sd_ready {
return notify('READY=1');
}
sub sd_stopping {
return notify('STOPPING=1');
}
sub sd_reloading {
return notify('RELOADING=1');
}
sub sd_status {
my $status = shift;
return notify("STATUS=$status");
}
1;
__END__
=pod
=encoding UTF-8
=for :stopwords Ioan Rogers
=head1 NAME
Linux::Systemd::Daemon - Systemd daemon API
=head1 VERSION
version 1.201600
=head1 SYNOPSIS
use Linux::Systemd::Daemon 'sd_ready';
# program initialisation
sd_ready;
while (1) {
sd_notify(watchdog => 1, status => 'Main loop running');
# do something here
}
sd_notify(stopping => 1, status => 'Shutting down...');
=head1 DESCRIPTION
An XS wrapper for L<sd-daemon|https://www.freedesktop.org/software/systemd/man/sd-daemon.html>,
the systemd daemon interface.
Exports one function, L</sd_notify>, by default. A variety of convenience
functions are also available for import, either individually or with the C<:all>
tag.
For a fully featured example, see the C<perl-daemon> script and
C<perl-daemon.service> examples in C<eg>.
=head1 FUNCTIONS
=head2 C<sd_notify(@array_of_pairs)>
The main function, exported by default. Takes a list of pairs and converts them
to a string to be passed to the C function
L<man:sd_notify(3)|https://www.freedesktop.org/software/systemd/man/sd_notify.html>
e.g.
sd_notify(ready => 1, status => 'Processing requests');
=head2 C<sd_watchdog()>
Convenience function. Optional export.
=head2 C<sd_ready()>
Convenience function. Optional export.
=head2 C<sd_stopping()>
Convenience function. Optional export.
=head2 C<sd_reloading()>
Convenience function. Optional export.
=head2 C<sd_status(Str $status_message)>
Convenience function. Optional export.
=head1 SEE ALSO
https://www.freedesktop.org/software/systemd/man/sd-daemon.html
=head1 AUTHOR
Ioan Rogers <ioanr@cpan.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2020 by Ioan Rogers.
This is free software, licensed under:
The GNU Lesser General Public License, Version 2.1, February 1999
=cut
|