From ecb08b787b2d44e2158c4b0f47d3989bbfe11429 Mon Sep 17 00:00:00 2001 From: Moritz Bunkus Date: Wed, 29 Aug 2012 17:58:14 +0200 Subject: [PATCH] =?utf8?q?Task-Server-Control:=20Auch=20STDERR=20vom=20aus?= =?utf8?q?gef=C3=BChrten=20Kommando=20(start/stop)=20auslesen?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- SL/System/TaskServer.pm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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; } -- 2.20.1