Попытка запустить простой скрипт резервного копирования CLI AWS. Он перебирает строки во включаемом файле, копирует эти пути до S3 и выводит выходные данные в файл журнала. Когда я запускаю эту команду напрямую, она запускается без ошибок. Когда я запускаю его через CRON, в моем выходном журнале появляется ошибка «Не удается найти учетные данные».
Сценарий оболочки:
AWS_CONFIG_FILE="~/.aws/config"
while read p; do
/usr/local/bin/aws s3 cp $p s3://PATH/TO/BUCKET --recursive >> /PATH/TO/LOG 2>&1
done </PATH/TO/INCLUDE/include.txt
Я только добавил строку в файл конфигурации после того, как начал видеть ошибку, думая, что это может исправить ее (даже если я почти уверен, что именно там AWS смотрит по умолчанию).
Сценарий оболочки работает от имени пользователя root. Я вижу конфигурационный файл AWS в указанном месте. И все это выглядит хорошо для меня (как я уже сказал, это прекрасно работает вне CRON).
bash
amazon-web-services
cron
shell
binaryorganic
источник
источник
~/.aws/config
.Ответы:
Если он работает, когда вы запускаете его напрямую, но не из cron, возможно, в среде что-то другое. Вы можете сохранить свою среду в интерактивном режиме, выполнив
И сделать то же самое в вашем сценарии
А потом
diff /tmp/env.cron env.interactive
и посмотрим, что имеет значение. Такие вещи, какPATH
наиболее вероятные виновники.источник
PATH
переменной (echo $PATH
скажет, какой она должна быть) в скрипте обычно решает ее.Когда вы запускаете задание из crontab, ваша
$HOME
переменная окружения/
Клиент Amazon ищет либо
или
Если
$HOME
=/
, то клиент не найдет эти файлыЧтобы заставить его работать, обновите ваш скрипт так, чтобы он экспортировал фактический домашний каталог для
$HOME
а затем положить файлы конфигурации или учетные данные в
источник
Я смог решить эту проблему с помощью следующего :
источник
aws configure
том, что вам не нужно вводить учетные данные, например, в сценарии. Посмотрите ответ, опубликованный @chicks, чтобы решить это правильно.AWS_ACCESS_KEY_ID
иAWS_SECRET_ACCESS_KEY
значения в сценариях. В первой строке уже должны быть указаны эти значения.Поместите этот код перед вашей командной строкой в crontab -e
источник
Двоичные файлы инструмента aws cli установлены в
/usr/local/bin/aws
.У меня была ошибка, что пользователь cron не мог получить доступ
/usr/local/bin/aws
во время работы; он может получить доступ только/usr/bin/
Я создал ссылку
/usr/bin
для aws с помощью команды ниже.Я также добавил некоторые изменения в свой скрипт; вот пример функции:
И запись cron:
Этот метод работал для меня.
источник
/usr/bin/aws
является ключом к решению.Эта строка в
.bashrc
файле по умолчанию для пользователя не позволит неинтерактивным оболочкам получить полную пользовательскую среду (включая переменную PATH):Закомментируйте строку так, чтобы
$HOME/.bashrc
ее можно было выполнить из неинтерактивного контекста.Я также должен был добавить явное
source
команду в мой скрипт оболочки, чтобы правильно настроить среду:Смотрите этот ответ для дополнительной информации.
источник
Все мы знаем, что переменная пути среды $ PATH имеет местоположение двоичных файлов. $ PATH Crontab может не иметь местоположения awscli.
Что вы можете сделать, это найти путь к двоичному файлу awscli.
и добавьте путь в $ PATH crontab, добавив строку ниже в начале вашего скрипта (после shebang).
Это сработало для меня!
источник
Я знаю, что это не идеальное решение, но это сработало для меня:
источник
Просто чтобы добавить добавленную стоимость, у меня возникли проблемы с новой версией Bash при использовании
awscli
инструмента, установленного через PIP, я обнаружил, что ничто не будет работать с этим инструментом с новыми версиями bash.Я смог решить, установив
aws-apitools-ec2
это можно установитьЯ прилагаю его руководство для дополнительной справки.
http://docs.aws.amazon.com/AWSEC2/latest/CommandLineReference/ec2-clt.pdf
источник
У меня была та же проблема, но после удаления перенаправления stderr из моей записи cron (
2>@1
) я увиделaws: command not found
в журнале.Это связано с тем, что AWS cli был установлен в домашней папке пользователя, и я добавил строку в моего пользователя,
.bash_profile
чтобы добавить путь к AWS cli в$PATH
. Как ни странно, именно так в документации по установке AWS cli указана установка . Но пользователь.bash_profile
не привыкает, когда выполняется пользовательский crontab (по крайней мере, в любом случае, в моем окружении).Поэтому все, что я сделал, чтобы это исправить, - убедился, что в моем скрипте crontab также есть aws cli. Итак, ниже, чем мой сценарий, у меня теперь есть
PATH=~/.local/bin:$PATH
.источник
Для меня это сработало:
Пользователь по умолчанию в современных экземплярах EC2 - это Ubuntu, а корневая папка - это домашняя папка пользователя. Вот где также есть все.
источник
Не самое лучшее, но мне пришлось предоставить конфигурацию непосредственно в моем скрипте shell / bash перед командами клиента AWS. нравится:
источник