2016-04-09 6 views
1

Ich versuche, "lvs" in einem Perl-Skript ausführen, um seine Ausgabe zu analysieren.Linux LVM lvs Befehl schlägt aus Cron Perl-Skript aber funktioniert von Cron direkt

my $output = `lvs --noheadings --separator : --units m --nosuffix 2>&1`; 
my $result = $?; 
if ($result != 0 || length($output) == 0) { 
    printf STDERR "Get list of LVs failed (exit result: %d): %s\n", 
    $result, $output; 
    exit(1); 
} 
printf "SUCCESS:\n%s\n", $output; 

Wenn ich das obige Skript von einem Terminal-Fenster ausführen, läuft es gut. Wenn ich über cron es fehlschlägt:

Get list of LVs failed (exit result: -1): 

Hinweis das Fehlen jeglicher Ausgabe (stdout + stderr)

Wenn ich das gleiche laufen „LVS --noheadings --separator: --units m - nosuffix "Befehl direkt in Cron, es läuft und gibt gut aus.

Wenn ich das Perl-Skript ändern, um Open3() zu verwenden, bekomme ich auch den gleichen Fehler ohne Ausgabe.

Wenn ich "-d -d -d -d -v -v -v" zu dem Befehl lvs hinzufügen, um ausführliche/Debug-Ausgabe zu aktivieren, sehe ich, dass wenn ich das Perl-Skript von Terminal ausführen, aber es gibt Keine Ausgabe bei Ausführung über Cron/Perl.

Ich laufe dies auf RHEL 7.2 mit/usr/bin/perl (5.16.3)

Irgendwelche Vorschläge ???

Antwort

0

Versuchen absoluten Pfad zu lvs mit:

my $output = `/sbin/lvs --noheadings --separator : --units m --nosuffix 2>&1`; 
2

Nach perldoc system "Rückgabewert von -1 einen Fehler anzeigt, das Programm oder einen Fehler des wait (2) Systemaufruf (inspizieren $ starten aus dem Grund) "Der Grund, warum es keine Ausgabe gibt, ist, dass lvs nicht erfolgreich gestartet wird.

Angesichts der üblichen Art der Cron-Probleme, würde ich sagen, der wahrscheinlichste Grund, warum es nicht läuft wäre, dass es nicht auf $PATH von cron verwendet wird. Versuchen Sie, den vollständigen Pfad anzugeben. Wenn dies nicht funktioniert, überprüfen Sie $! auf die Fehlermeldung des Betriebssystems.

+1

Ja, das Problem ist, dass innerhalb von Cron + Perl die $ PATH wurde nicht festgelegt, um/sbin enthalten wo "lvs" ist. Wenn Sie also "/ sbin/lvs" angeben, wird das Problem behoben. Vielen Dank!!! –