From e2753e5f8b38d0b62fcea7af597c14cae75782e7 Mon Sep 17 00:00:00 2001 From: Karen Etheridge Date: Thu, 18 Apr 2013 15:01:58 -0700 Subject: [PATCH] create the pid_file dir if it does not exist - steal the _create_resource_dir sub to create a generic dir - re-use it to create the pid dir - with a few more trace() diagnostics too --- Changes | 2 ++ lib/Daemon/Control.pm | 26 +++++++++++++++++--------- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/Changes b/Changes index 86a21cb..bf10d8e 100644 --- a/Changes +++ b/Changes @@ -1,4 +1,6 @@ + * create dir for pid_file if it does not exist + 0.001000 2013-02-26 SymKat * fixed a warning on "uninitialized value $called_with in substitution" (Kromg) diff --git a/lib/Daemon/Control.pm b/lib/Daemon/Control.pm index 2d47a81..515c812 100644 --- a/lib/Daemon/Control.pm +++ b/lib/Daemon/Control.pm @@ -131,16 +131,21 @@ sub redirect_filehandles { sub _create_resource_dir { my ( $self ) = @_; + $self->_create_dir($self->resource_dir); +} - return 0 unless $self->resource_dir; +sub _create_dir { + my ( $self, $dir ) = @_; - if ( -d $self->resource_dir ) { - $self->trace( "Resource dir exists (" . $self->resource_dir . ")" ); + return 0 unless $dir; + + if ( -d $dir ) { + $self->trace( "Dir exists (" . $dir . ") - no need to create" ); return 1; } my ( $created ) = make_path( - $self->resource_dir, + $dir, { uid => $self->uid, group => $self->gid, @@ -155,14 +160,13 @@ sub _create_resource_dir { } } - if ( $created eq $self->resource_dir ) { - $self->trace( "Created resource dir (" . $self->resource_dir . ")" ); + if ( $created eq $dir ) { + $self->trace( "Created dir (" . $dir . ")" ); return 1; } - $self->trace( "_create_resource_dir() failed and I don't know why" ); + $self->trace( "_create_dir() for $dir failed and I don't know why" ); return 0; - } sub _double_fork { @@ -256,7 +260,6 @@ sub _launch_program { sub write_pid { my ( $self ) = @_; - # Create the PID file as the user we currently are, # and change the permissions to our target UID/GID. @@ -270,10 +273,15 @@ sub write_pid { sub _write_pid { my ( $self ) = @_; + + my ($volume, $dir, $file) = File::Spec->splitpath($self->pid_file); + return 0 if not $self->_create_dir($dir); + open my $sf, ">", $self->pid_file or die "Failed to write " . $self->pid_file . ": $!"; print $sf $self->pid; close $sf; + $self->trace( "Wrote pid (" . $self->pid . ") to pid file (" . $self->pid_file . ")" ); return $self; }