Perl Shell Command ausführen

Aus MyWiki
Version vom 22. August 2016, 07:37 Uhr von 81.200.198.20 (Diskussion) (Die Seite wurde neu angelegt: „Es gibt in Perl mehrere Möglichkeiten einen Shell-Command auszuführen.<br> Für mich hat sich folgende Methode bewährt<br> #!/usr/bin/perl use IPC::Cmd…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Es gibt in Perl mehrere Möglichkeiten einen Shell-Command auszuführen.
Für mich hat sich folgende Methode bewährt

 #!/usr/bin/perl
 use IPC::Cmd qw[can_run run run_forked];
 my ($success, $error_message, $full_buffer, $stdout_buf, $stderr_buf ) = run( command => "<pfad/zu/command_oder_script> <Parameter>", verbose => 0 );

Success ist ein "Boolean" und kann mit if ($success) geprüft werden.
$error_message ist ein normaler String und enthält eine eventuelle Fehlermeldung
der Rest sind Array-Referenzen, die z.b. mit @{$full_buffer} in einen richtigen Array umgewandelt werden können (dereferenziert werden)

WICHTIG: wird ein Perl Script als cronjob ausgeführt, muss immer der vollständige Pfad im run-command Teil in Perl angegeben werden.
Das gilt auch für Shell-Befehle wie "Service ... restart"
in diesem Fall mit which <shell_befehl> den vollständigen Pfad ermitteln und im Perl-Command Teil angeben.
Bsp:
my ($success, $error_message, $full_buffer, $stdout_buf, $stderr_buf ) = run( command => "/usr/sbin/service icinga2 reload", verbose => 0 );