web-dev-qa-db-fra.com

AWS ne fonctionne pas depuis Crontab

J'ai donc un script pour télécharger quotidiennement un fichier à partir d'AWS et l'ajouter à une feuille de calcul. Pour ce faire, j'ai créé un cronjob.

Le script fonctionne correctement lorsque je l'exécute manuellement, mais ne fonctionne pas lorsqu'il est exécuté à partir de la tâche cron.

Le code a une ligne:

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

Et dans l'email que je reçois de l'exécution de cronjob, je vois le message d'erreur suivant:

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

Je ne sais pas pourquoi la commande n'est pas trouvée. Toute aide est la bienvenue.

26
AnPocArBuile

Premièrement: vérifiez où est stocké l'exécutable aws sur votre système. Utilisez cette commande:

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

Maintenant, placez une variable appelée $PATH dans votre crontab avant le script:

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

Ces chemins séparés par : définissent où doit être recherché l'exécutable. Dans l'exemple ci-dessus, il s'agit de /usr/bin. Vous devez vérifier que tous les exécutables de votre travail cron sont disponibles.

Autre chose: essayez d'éviter le chemin avec un tilde (~) dans les tâches cron. Utilisez /home/user à la place.

38
chaos

Vous devez utiliser le chemin complet pour la commande "aws". Par exemple,/usr/local/bin/aws

23
libregeek

Placez ce code avant votre ligne de commande à exécuter dans crontab -e

Shell=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

La seule chose qui a fonctionné pour moi a été de spécifier le chemin explicitement dans le script:

ROOTDIR=/home/myusername
LOGDIR=$ROOTDIR/logs
DUMPDIR=$ROOTDIR/db_backup
LOGFILE=$LOGDIR/db_backup.log

$ROOTDIR/.local/bin/aws s3 cp $DUMPDIR/myappname-`date +"%Y-%m-%d"` s3://my-bucket-name/backups/myappname-`date +"%Y-%m-%d"` --recursive >> $LOGFILE 2>&1

Comme l'a dit une précédente affiche, utilisez which aws pour trouver l'emplacement des aws.

1
Little Brain