Я пытаюсь запустить сценарий резервного копирования на моем сервере ec2 amazon (ubuntu 14.04), чтобы автоматически создать моментальный снимок томов amazon ebs. Поэтому я использую скрипт aws-missing-tools: https://github.com/colinbjohnson/aws-missing-tools/tree/master/ec2-automate-backup
Это мой сценарий резервного копирования, запускающий ec2-automate-backup-awscli.sh:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin/aws
HOME=/
JAVA_HOME=/usr/lib/jvm/default-java/jre/
MAILTO=xxx.xxxxxx@me.com
AWS_ACCESS_KEY=xxxxxxxxxxxxxxxxxxxx
AWS_SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
/opt/aws/ec2-automate-backup-awscli.sh -r us-east-1 -s tag -t 'Backup,Values=true' -k 31 -p
Но я получаю эту ошибку только при планировании этого скрипта с помощью crontab:
26 23 * * * /opt/aws/backup.sh >> /var/log/aws.log 2>&1
Файл журнала: «Чтобы использовать ec2-automate-backup-awscli.sh, должен быть установлен исполняемый файл« aws »».
Непосредственное выполнение "sh backup.sh" работает нормально. (снимки создаются.)
Любые идеи?
Ваш PATH
переменная должна быть списком каталоги, учитывая, что ваш aws
исполняемый файл живет в /usr/local/bin/aws
, ваш PATH
должно быть это:
/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
Кроме того, вам лучше установить оболочку с помощью «хэшбэга», а не использовать SHELL
переменная окружения, так как это позволит crontab автоматически использовать правильный интерпретатор:
#!/bin/bash
У меня была именно такая ошибка. Предполагая, что у вас установлены необходимые компоненты и запуск команды вручную работает, но не в Cron, возможно, правильный путь не отображается команде cron. Вы можете исправить это, запустив crontab -e, а затем введя путь прямо на вкладке cron:
# Export the path so that the scripts run correctly
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/aws/bin:/root/bin
Точка не допускается в имени файла сценария cron, если 14.04 действительно не включила Linux Standards Base, просто A-Za-z0-9-
- видеть эта ошибка Launchpad для получения дополнительной информации
Переименовать "backup.sh
"к"backupsh
".
Лучшее испытание, чем "sh backup.sh
" было бы "run-parts --verbose /opt/aws/
". Если run-parts не показывает ваше имя файла, cron не запустит его.