2014-10-21 20 views
19

Mam więc skrypt, aby pobrać plik z AWS codziennie i dołączyć go do arkusza kalkulacyjnego. Aby to zrobić, przygotowałem cronjob.AWS nie działa, działa z Cronjob

Skrypt działa poprawnie, gdy uruchamiam go ręcznie, ale nie działa podczas uruchamiania z cronjob.

Kod ma linię:

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

A w I odbieranie wiadomości e-mail z realizacją cronjob, widzę następujący komunikat o błędzie:

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

nie wiem dlaczego komenda nie znaleziono. Każda pomoc byłaby świetna.

+0

To cholernie $ hi7 powinny być udokumentowane przez AWS w sekcji dotyczącej tworzenia crona dla s3 CLI. – Fr0zenFyr

Odpowiedz

27

Po pierwsze: sprawdź, gdzie w systemie jest przechowywany plik wykonywalny aws. Użyj tego polecenia:

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

Teraz umieścić zmienną $PATH w crontab przed skryptem:

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

Te ścieżki oddzielone : określić, gdzie należy szukać w exectable. W powyższym przykładzie jest to /usr/bin. Musisz sprawdzić wszystkie pliki wykonywalne w swojej pracy crona, że ​​są one dostępne.

Kolejna sprawa: Staraj się unikać ścieżki z tyldą (~) w cronjobs. Zamiast tego użyj /home/user.

+0

Dlaczego to działa, gdy jest wykonywane ręcznie? –

+1

Jeśli "echo $ PATH" zobaczysz, że twoja sesja ma załadowaną zmienną. Jednak po uruchomieniu z crontab nie. –

+1

Zapisane moje ar $ e ... musiałem utworzyć i przenieść kopie zapasowe mojego serwera pocztowego do wiadra s3. kiedy uruchomiłem mój skrypt (przy pomocy aws s3 cp ...), to działało, wystarczyło dodać 'PATH', aby działało z cronem. Przysięgam, że gdyby nie twoja poczta, nigdy nie byłbym w stanie tego rozgryźć w innym roku. – Fr0zenFyr

19

Powinieneś użyć pełnej ścieżki do polecenia "aws". Na przykład/usr/local/bin/aws

+0

To był problem dla mnie, dzięki. –

+1

Dlaczego tak jest? ... –

+1

@ user5735796 - gdy skrypt uruchamiany jest przez crona, wyszukuje plik wykonywalny aws w predefiniowanych lokalizacjach, skonfigurowanych w zmiennej $ PATH. Jeśli aws nie jest zainstalowany w tych lokalizacjach, nie można znaleźć polecenia. Tak więc albo użyj pełnej ścieżki do pliku wykonywalnego, albo dodaj swoją lokalizację aws do zmiennej $ PATH. – plspl

3

Umieść ten kod zanim wiersz poleceń do wykonania w crontab -e

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

To jest dobra opcja –