Мне нужно постоянное хранилище для спотовых окончаний.
Мой подход к решению проблемы
Напишите сценарий запуска, который подключает и монтирует постоянный том
Сделайте снимок этого состояния и зарегистрируйте частный AMI
Запускать спотовые инстансы на основе частного AMI
поиски в этом форуме [1] предполагает, что это правильная процедура
Мой сценарий запуска:
#!/bin/sh
echo "executing startup script"
# attach the EBS volume to this machine
aws ec2 attach-volume --volume-id vol-7bef1d96 --instance-id $(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id ) --device /dev/xvdg
sleep 10
# mount the attached EBS volume
echo "mounting the attached volume"
sudo mount /dev/xvdg1 /home/ubuntu/persistent/
#run script
echo "starting the dummy program in background"
python2 persistent/dummyProgram.py &
Скрипт отлично работает, если его запустить вручную. Однако, когда он выполняется cron, выполняется только оператор echo
задача crontab
@reboot /path/to/startupScript.sh
Как мне решить эту проблему?
Исправленная запись в crontab гласит:
USER=username
PATH=content of $PATH
@reboot /path/to/startupScript.sh
Наиболее вероятная причина, по которой команды не запускаются при вызове из сценария crontab, заключается в том, что они не находятся в переменной среды PATH. Записи Crontab по умолчанию запускаются с минимальным набором переменных среды.
Пока cron
определенно может выполнить свою работу, канонический способ сделать это - указать user-data
скрипт, который запускается при запуске спотового экземпляра. С помощью интерфейса командной строки AWS request-spot-instance
это указывается в JSON с помощью --launch-specification
аргумент.
http://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html
Этот раздел может быть небольшим сценарием оболочки и позволяет вам изменить идентификатор тома если это когда-нибудь понадобится вместо жесткого кодирования в AMI.