Commit | Line | Data |
5231273c |
1 | use strict; |
2 | use warnings; |
d9e417f4 |
3 | package MooseX::Daemonize::WithPidFile; |
5231273c |
4 | |
4327fe98 |
5 | use MooseX::Getopt; # to load the Getopt metaclass |
d9e417f4 |
6 | use Moose::Role; |
d5a304d9 |
7 | use namespace::autoclean; |
d9e417f4 |
8 | |
69186a48 |
9 | use MooseX::Daemonize::Pid::File; |
d9e417f4 |
10 | |
d02fc704 |
11 | with 'MooseX::Daemonize::Core'; |
12 | |
d9e417f4 |
13 | requires 'init_pidfile'; |
14 | |
15 | has pidfile => ( |
4327fe98 |
16 | # NOTE: |
1d85c76d |
17 | # this should always be accessible |
4327fe98 |
18 | # from the command line IMO |
19 | # - SL |
20 | metaclass => 'Getopt', |
d8985b7d |
21 | isa => 'MooseX::Daemonize::Pid::File', |
d9e417f4 |
22 | is => 'rw', |
23 | lazy => 1, |
d9e417f4 |
24 | coerce => 1, |
25 | predicate => 'has_pidfile', |
26 | builder => 'init_pidfile', |
27 | ); |
28 | |
d02fc704 |
29 | after 'daemonize' => sub { |
1ddf8f0c |
30 | my $self = shift; |
d02fc704 |
31 | # NOTE: |
1d85c76d |
32 | # make sure that we do not have |
d02fc704 |
33 | # any bad PID values stashed around |
34 | # - SL |
1ddf8f0c |
35 | $self->pidfile->clear_pid; |
5b9ebe08 |
36 | if ($self->is_daemon) { |
37 | $self->pidfile->write; |
38 | } |
d02fc704 |
39 | }; |
40 | |
d9e417f4 |
41 | 1; |
42 | |
8ac4733f |
43 | __END__ |
44 | |
45 | =pod |
46 | |
4327fe98 |
47 | =head1 NAME |
48 | |
49 | MooseX::Daemonize::WithPidFile - A Role with the core daemonization and pidfile management |
50 | |
51 | =head1 SYNOPSIS |
52 | |
53 | package My::Daemon; |
54 | use Moose; |
55 | |
56 | with 'MooseX::Daemonize::WithPidFile'; |
57 | |
58 | sub start { |
59 | my $self = shift; |
60 | # daemonize me ... |
61 | $self->daemonize; # << this will write the pidfile for you |
62 | # return from the parent,... |
63 | return unless $self->is_daemon; |
64 | # but continue on in the child (daemon) |
65 | } |
66 | |
67 | =head1 DESCRIPTION |
68 | |
1d85c76d |
69 | This is a slightly extended basic daemonization Role, it provides |
70 | Pidfile management along with the core daemonization features |
4327fe98 |
71 | found in L<MooseX::Daemonize::Core>. |
72 | |
73 | =head1 ATTRIBUTES |
74 | |
75 | =over |
76 | |
77 | =item I<pidfile (is => rw, isa => MooseX::Daemonize::Pid::File)> |
78 | |
79 | This attribute holds the L<MooseX::Daemonize::Pid::File> object used |
1d85c76d |
80 | to manage the Pidfile. It will initialize the object using the |
4327fe98 |
81 | C<init_pidfile> method (which is required by this role). |
82 | |
83 | =back |
84 | |
85 | =head1 REQUIRED METHODS |
86 | |
87 | =over 4 |
88 | |
89 | =item I<init_pidfile> |
90 | |
91 | This method is used to build the I<pidfile> attribute's object. It should |
92 | return a L<MooseX::Daemonize::Pid::File> object. |
93 | |
94 | =item B<has_pidfile> |
95 | |
1d85c76d |
96 | This is a predicate method to tell you if your I<pidfile> attribute has |
4327fe98 |
97 | been initialized yet. |
98 | |
99 | =back |
100 | |
101 | =head1 METHODS |
102 | |
103 | =over 4 |
104 | |
105 | =item B<daemonize> |
106 | |
1d85c76d |
107 | This adds an C<after> method modifier to the C<daemonize> method (from |
4327fe98 |
108 | L<MooseX::Daemonize::Core>) and handles writing your Pidfile for you. |
109 | |
110 | =item B<meta> |
111 | |
112 | The C<meta()> method from L<Class::MOP::Class> |
113 | |
114 | =back |
115 | |
116 | =head1 DEPENDENCIES |
117 | |
118 | L<Moose::Role>, L<MooseX::Getopt> and L<MooseX::Daemonize::Pid::File> |
119 | |
120 | =head1 INCOMPATIBILITIES |
121 | |
122 | None reported. |
123 | |
124 | =head1 BUGS AND LIMITATIONS |
125 | |
126 | No bugs have been reported. |
127 | |
128 | Please report any bugs or feature requests to |
129 | C<bug-acme-dahut-call@rt.cpan.org>, or through the web interface at |
130 | L<http://rt.cpan.org>. |
131 | |
132 | =head1 AUTHOR |
133 | |
134 | Stevan Little C<< <stevan.little@iinteractive.com> >> |
135 | |
136 | =head1 LICENCE AND COPYRIGHT |
137 | |
05b96f4d |
138 | Copyright (c) 2007-2011, Chris Prather C<< <perigrin@cpan.org> >>. All rights |
4327fe98 |
139 | reserved. |
140 | |
141 | Portions heavily borrowed from L<Proc::Daemon> which is copyright Earl Hood. |
142 | |
143 | This module is free software; you can redistribute it and/or |
144 | modify it under the same terms as Perl itself. See L<perlartistic>. |
145 | |
146 | =head1 DISCLAIMER OF WARRANTY |
147 | |
148 | BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
149 | FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
150 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
151 | PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER |
152 | EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
153 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE |
154 | ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH |
155 | YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL |
156 | NECESSARY SERVICING, REPAIR, OR CORRECTION. |
157 | |
158 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
159 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
160 | REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE |
161 | LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, |
162 | OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE |
163 | THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING |
164 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A |
165 | FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF |
166 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF |
167 | SUCH DAMAGES. |
168 | |
169 | =cut |