Der Befehl gzip funktioniert nicht im Shell-Skript

463
damodar

Wenn ich mein Skript durch crontab laufen lasse, funktioniert gzip nicht. Wenn ich dasselbe Skript manuell ausführe, funktioniert gzip.

Der Befehl, den wir in unserem Skript haben, lautet

gzip -vf $path/file.eee 

In meinem Skript generiere ich eine Protokolldatei, die ein .expFormat hat. Dann versuche ich, sie mithilfe des Befehls gzip zu komprimieren

gzip -vf $PATH/file.exp 

Nachdem dies erwartet wurde, file.exp.gzaber gzip fehlschlägt, habe ich gesehen, dass der gzip-Status 141 zurückgegeben wird. Abgesehen von gzip funktioniert dieses Skript einwandfrei, andere Befehle funktionieren einwandfrei.

$PATHist Weg zu file.exp. Ich kopierte die file.expauf /rootOrdner. Im Root-Ordner habe ich ein Testskript abgelegt, das den gzip -vf /root/file.expBefehl hat. Dieses Testskript habe ich zu crontab hinzugefügt, was gut funktioniert. Nach Abschluss der Crontab sah ich die Ausgabe im Root-Ordner, deren file.exp.gzDatei ich sehen konnte . In Crontab habe ich die richtigen Benutzer und Befehle gegeben.

-2
Was bedeutet "nicht gut funktionieren"? Tomasz Jakub Rup vor 5 Jahren 3
Ihre Frage ist von sehr geringer Qualität. Ich glaube, Crontab läuft in einem anderen Ordner, als wenn Sie es manuell ausführen. davidbaumann vor 5 Jahren 0
Hallo, Willkommen bei SuperUser. Bitte lesen Sie [Wie kann ich eine gute Frage stellen?] (Https://superuser.com/help/how-to-ask): "Teilen Sie uns auch Ihre Ergebnisse mit. Das Teilen Ihrer Forschungsergebnisse hilft allen. Sagen Sie uns, was Sie gefunden haben und warum es nicht Ihren Bedürfnissen entsprach. Dies zeigt, dass Sie sich die Zeit genommen haben, um sich selbst zu helfen, es erspart uns, offensichtliche Antworten zu wiederholen, und vor allem hilft es Ihnen, eine spezifischere und relevantere Antwort zu erhalten! " C0deDaedalus vor 5 Jahren 2
Versuchen Sie `gzip -vf $ Pfad / Datei.eee 1> ~ / testmsg.txt 2> ~ / testerr.txt` und lesen Sie die Fehlermeldungen aus diesen Dateien im Home-Verzeichnis des Benutzers. Prüfen Sie, ob ein anderer Befehl tatsächlich "in crontab" funktioniert, z. B. das Erstellen eines Verzeichnisses. Stellen Sie sicher, dass ein Benutzer, der crontab imitiert, die erforderlichen Zugriffsrechte hat. Jack White vor 5 Jahren 0
Hallo, in meinem Skript generiere ich eine Protokolldatei, die im .exp-Format vorliegt. Dann versuche ich, sie mit dem gzip-Befehl (gzip -vf $ PATH / file.exp) zu komprimieren, nachdem file.exp.gz erwartet wurde, aber gzip scheitert, ich habe gesehen, wie der gzip-Status 141 zurückgegeben wird. Abgesehen von gzip funktioniert dieses Skript einwandfrei, andere Befehle funktionieren einwandfrei damodar vor 5 Jahren 0
Sie benutzen wirklich $ PATH / $ Pfad? Es ist Systemvariable Tomasz Jakub Rup vor 5 Jahren 1

1 Antwort auf die Frage

1
Tomasz Jakub Rup

Beendigungscode:

Bei Austrittswerten gibt ein Wert über 128 die Beendigung aufgrund eines Signals an, und der Betrag über 128 zeigt an, welches Signal die Beendigung verursacht hat. Wenn wir also 128 vom Exit-Code des OP von 141 subtrahieren, erhalten wir 13, was SIGPIPE entspricht ( man 7 signalfür eine Liste von Standardsignalen und deren entsprechenden ganzzahligen Werten).

Die Manpage listet den Kommentar von SIGPIPE als "Defekte Pipe: In Pipe schreiben ohne Leser".

Variable:

Du verwendest wirklich $PATH/ $path?

echo $PATH /usr/local/sbin:/usr/local/bin:/usr/bin echo $path /usr/local/sbin /usr/local/bin /usr/bin 

Über Cron Job:

Cron-Jobs laufen auf minimaler Umgebung. $PATHunterscheidet sich in cron und shell session.

Teilantwort basierend auf Ihren Informationen:

Der letzte Eintrag in $PATHIhrer Shell-Sitzung enthält den Pfad zu Ihrem Skript. file.expwird in diesem Pfad erstellt.

Ja, $ PATH ist der Pfad zu file.exp. Ich habe die Datei file.exp in den Ordner / root kopiert. Im Root-Ordner habe ich ein Testskript abgelegt, das den Befehl gzip -vf /root/file.exp enthält. Dieses Testskript habe ich zu Crontab hinzugefügt, was gut funktioniert. nach dem abschluss des crontab sah ich die ausgabe im root-ordner. Ich konnte file.exp.gz file sehen. In crontab gab ich den richtigen Benutzer und den richtigen Befehl damodar vor 5 Jahren 0
@damodar Versuchen Sie, den vollständigen Pfad zu `file.exp` anstelle von $ path / file.exp` zu verwenden Tomasz Jakub Rup vor 5 Jahren 0