X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=SL%2FSystem%2FTaskServer.pm;h=a37cd03d1a7a9f223c26d3521d09fc203e1c1213;hb=713de5ed35a8a1faea940354254c4e781631c495;hp=17be8edac86e5bfe4ddfeee4c269a8a3f61e631f;hpb=a63be3ade409baf428160656cbdbd876486c7278;p=kivitendo-erp.git diff --git a/SL/System/TaskServer.pm b/SL/System/TaskServer.pm index 17be8edac..a37cd03d1 100644 --- a/SL/System/TaskServer.pm +++ b/SL/System/TaskServer.pm @@ -10,6 +10,8 @@ use Rose::Object::MakeMethods::Generic ( use File::Slurp; use File::Spec::Functions qw(:ALL); +use File::Temp; +use Sys::Hostname (); use SL::System::Process; @@ -19,6 +21,10 @@ use constant { ERR_PROCESS => -2, }; +use constant PID_BASE => "users/pid"; + +my $node_id; + sub status { my ($self) = @_; @@ -40,6 +46,12 @@ sub start { return $self->_run_script_command('start'); } +sub start_if_not_running { + my ($self) = @_; + + $self->start unless $self->is_running; +} + sub stop { my ($self) = @_; @@ -54,6 +66,14 @@ sub wake_up { return kill('ALRM', $pid) ? 1 : undef; } +sub node_id { + return $node_id if $node_id; + + $node_id = ($::lx_office_conf{task_server} // {})->{node_id} || Sys::Hostname::hostname(); + + return $node_id; +} + # # private methods # @@ -64,8 +84,7 @@ sub _read_pid { my $exe_dir = SL::System::Process->exe_dir; foreach my $conf (qw(kivitendo.conf lx_office.conf kivitendo.conf.default)) { - my $pid_file_name = join '.', splitdir($exe_dir), "config.${conf}.pid"; - my $pid_file_path = catfile(catdir($exe_dir, 'users', 'pid'), $pid_file_name); + my $pid_file_path = catfile(catdir($exe_dir, splitdir(PID_BASE())), "config.${conf}.pid"); return join('', read_file($pid_file_path)) * 1 if -f $pid_file_path; } @@ -74,8 +93,15 @@ sub _read_pid { sub _run_script_command { my ($self, $command) = @_; - my $exe = catfile(catdir(SL::System::Process->exe_dir, 'scripts'), 'task_server.pl'); - $self->last_command_output(`${exe} ${command}`); + my $exe = catfile(catdir(SL::System::Process->exe_dir, 'scripts'), 'task_server.pl'); + my $temp_file = File::Temp->new; + my $file_name = $temp_file->filename; + + $temp_file->close; + + system "${exe} ${command} >> ${file_name} 2>&1"; + + $self->last_command_output(read_file($file_name)); return $? == 0 ? 1 : undef; }