Perl Shell Command ausführen
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 );