package MooseX::Daemonize;
use strict; # because Kwalitee is pedantic
use Moose::Role;
-use MooseX::Types::Path::Class;
-use Moose::Util::TypeConstraints;
-our $VERSION = 0.05;
+use MooseX::Daemonize::Types;
-use Carp 'carp';
-use Proc::Daemon;
-use MooseX::Daemonize::PidFile;
+our $VERSION = 0.05;
with qw[
MooseX::Daemonize::Core
MooseX::Daemonize::WithSignalHandling
+ MooseX::Daemonize::WithPidFile
MooseX::Getopt
];
},
);
-has basedir => (
+has pidbase => (
isa => 'Path::Class::Dir',
is => 'ro',
coerce => 1,
- required => 1,
+ required => 1,
lazy => 1,
- default => sub { Path::Class::Dir->new('/') },
+ default => sub { Path::Class::Dir->new('var', 'run') },
);
-has pidbase => (
+has basedir => (
isa => 'Path::Class::Dir',
is => 'ro',
coerce => 1,
- required => 1,
+ required => 1,
lazy => 1,
- default => sub { Path::Class::Dir->new('var', 'run') },
-);
-
-coerce 'MooseX::Daemonize::PidFile'
- => from 'Str'
- => via { MooseX::Daemonize::PidFile->new( file => $_ ) };
-
-has pidfile => (
- isa => 'MooseX::Daemonize::PidFile',
- is => 'rw',
- lazy => 1,
- required => 1,
- coerce => 1,
- predicate => 'has_pidfile',
- default => sub {
- my $file = $_[0]->pidbase . '/' . $_[0]->progname . '.pid';
- confess "Cannot write to $file" unless (-e $file ? -w $file : -w $_[0]->pidbase);
- MooseX::Daemonize::PidFile->new( file => $file );
- },
+ default => sub { Path::Class::Dir->new('/') },
);
has foreground => (
default => sub { 0 },
);
-
has stop_timeout => (
isa => 'Int',
is => 'rw',
default => sub { 2 }
);
+sub init_pidfile {
+ my $self = shift;
+ my $file = $self->pidbase . '/' . $self->progname . '.pid';
+ confess "Cannot write to $file" unless (-e $file ? -w $file : -w $self->pidbase);
+ MooseX::Daemonize::PidFile->new( file => $file );
+}
+
sub start {
my ($self) = @_;
return unless ( CORE::kill 0 => $pid or $!{EPERM} );
# IF it is still running
- carp "$pid doesn't seem to want to die."; # AHH EVIL DEAD!
+ Carp::carp "$pid doesn't seem to want to die."; # AHH EVIL DEAD!
};
1;
--- /dev/null
+package MooseX::Daemonize::Types;
+
+use Moose::Util::TypeConstraints;
+use MooseX::Types::Path::Class;
+use MooseX::Daemonize::PidFile; # need this for the coercion below
+
+our $VERSION = 0.01;
+
+coerce 'MooseX::Daemonize::PidFile'
+ => from 'Str'
+ => via { MooseX::Daemonize::PidFile->new( file => $_ ) }
+ => from 'Path::Class::File'
+ => via { MooseX::Daemonize::PidFile->new( file => $_ ) };
+
+1;
+
+__END__
\ No newline at end of file
--- /dev/null
+package MooseX::Daemonize::WithPidFile;
+use strict;
+use Moose::Role;
+
+use MooseX::Daemonize::Types;
+use MooseX::Daemonize::PidFile;
+
+our $VERSION = 0.01;
+
+requires 'init_pidfile';
+
+has pidfile => (
+ isa => 'MooseX::Daemonize::PidFile',
+ is => 'rw',
+ lazy => 1,
+ required => 1,
+ coerce => 1,
+ predicate => 'has_pidfile',
+ builder => 'init_pidfile',
+);
+
+1;
+
+__END__
\ No newline at end of file