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.
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.
Vous devez utiliser le chemin complet pour la commande "aws". Par exemple,/usr/local/bin/aws
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.