From: Moritz Bunkus Date: Wed, 29 Aug 2012 15:58:14 +0000 (+0200) Subject: Task-Server-Control: Auch STDERR vom ausgeführten Kommando (start/stop) auslesen X-Git-Tag: release-3.0.0beta1~264^2~6 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=ecb08b787b2d44e2158c4b0f47d3989bbfe11429;p=kivitendo-erp.git Task-Server-Control: Auch STDERR vom ausgeführten Kommando (start/stop) auslesen Das geht leider nicht mehr mit my $output = `$exe 2>&1`; weil das nach dem Forken irgendwie einen Zombie-Prozess hinterlässt und Perl aus dem `...` nicht zurückkehrt. Also die Variante mit Umleitung in temporäre Datei wählen. --- diff --git a/SL/System/TaskServer.pm b/SL/System/TaskServer.pm index 17be8edac..df67523ec 100644 --- a/SL/System/TaskServer.pm +++ b/SL/System/TaskServer.pm @@ -10,6 +10,7 @@ use Rose::Object::MakeMethods::Generic ( use File::Slurp; use File::Spec::Functions qw(:ALL); +use File::Temp qw(tempfile); use SL::System::Process; @@ -74,8 +75,14 @@ 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 ($fh, $file_name) = tempfile(); + my $exe = catfile(catdir(SL::System::Process->exe_dir, 'scripts'), 'task_server.pl'); + + system "${exe} ${command} >> ${file_name} 2>&1"; + + $fh->close; + + $self->last_command_output(read_file($file_name)); return $? == 0 ? 1 : undef; }