2014-10-21 31 views
19

Also habe ich ein Skript, um eine Datei von AWS täglich herunterzuladen und an ein Tabellenkalkulationsblatt anzuhängen. Um dies zu tun, habe ich einen Cronjob eingerichtet.AWS arbeitet nicht von Cronjob

Das Skript funktioniert gut, wenn ich es manuell ausführe, funktioniert aber nicht, wenn es vom Cronjob ausgeführt wird.

Der Code hat eine Linie:

aws s3 cp s3://My/files/backup/ ~/home/AnPoc/ --recursive --exclude "*.tgz" --include "*results.tgz" 

Und in der E-Mail ich von der cronjob Ausführung empfangen, sehe ich die folgende Fehlermeldung:

./AnPoc/DayProcessing.sh: line 14: aws: command not found 

Ich weiß nicht, warum der Befehl wird nicht gefunden. Jede Hilfe wäre großartig.

+0

Dieses verflixte $ Hi7 cron für s3 cli zum Erstellen von in einem Abschnitt von AWS dokumentiert ausgeführt werden sollte. – Fr0zenFyr

Antwort

27

Zuerst: Überprüfen Sie, wo auf Ihrem System die ausführbare Datei aws gespeichert ist. Verwenden Sie diesen Befehl:

$ which aws 
/usr/bin/aws # example output, can differ in your system 

Nun legen Sie eine Variable $PATH in crontab vor dem Skript aufgerufen:

PATH=/usr/bin:/usr/local/bin 

Diese getrennte Pfade durch : definieren, in denen für die exectable suchen sollte. Im obigen Beispiel ist es /usr/bin. Sie müssen alle ausführbaren Dateien in Ihrem Cron-Job überprüfen, dass sie verfügbar sind.

Eine andere Sache: versuchen, Pfad mit einer Tilde (~) in Cronjobs zu vermeiden. Verwenden Sie stattdessen /home/user.

+0

Warum funktioniert es, wenn es manuell ausgeführt wird? –

+1

Wenn Sie "$ PATH" anzeigen, sehen Sie, dass Ihre Sitzung die Variable geladen hat. Jedoch, wenn Sie von Crontab ausführen, tut es nicht. –

+1

Saved my ar $ e ... musste Backups meines Mailservers in s3 bucket erstellen und verschieben. wenn ich mein Skript (mit aws s3 cp ...) manuell ausführte, funktionierte es, nur das Hinzufügen des "PATH" war nötig, damit es mit cron funktioniert. Ich schwöre, wenn es nicht für deinen Posten wäre, würde ich das in einem anderen Jahr nie selbst herausfinden können. – Fr0zenFyr

19

Sie sollten den vollständigen Pfad für den Befehl "aws" verwenden. Beispiel:/usr/local/bin/aws

+0

Das war das Problem für mich, danke. –

+1

Warum ist das? ... –

+1

@ user5735796 - Wenn das Skript über cron ausgeführt wird, sucht es nach ausführbaren aws-Dateien an vordefinierten Speicherorten, wie in der Variablen $ PATH konfiguriert. Wenn an diesen Stellen keine aws installiert ist, kann der Befehl nicht gefunden werden. Verwenden Sie also entweder den vollständigen Pfad zum Ausführen oder fügen Sie Ihren aws-Speicherort zur Variablen $ PATH hinzu. – plspl

3

Setzen Sie diesen Code vor der Befehlszeile in crontab -e

SHELL=/bin/bash 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 
+0

Das ist eine gute Option –