Task-Server-Control: Auch STDERR vom ausgeführten Kommando (start/stop) auslesen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 29 Aug 2012 15:58:14 +0000 (17:58 +0200)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Wed, 29 Aug 2012 15:58:14 +0000 (17:58 +0200)
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

index 17be8ed..df67523 100644 (file)
@@ -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;
 }