albind automaticamente il volume EBS ad un'istanza Spot

Ho bisogno di qualche magazzino persistente attraverso terminazioni di punta.

Il mio approccio per risolvere il problema è

  1. Scrivi uno script di avvio che attacca e monta il volume persistente

  2. Snapshot questo stato e registrare un AMI privato

  3. Istanze di lancio Spot in base all'AMI privato

le ricerche in questo forum [ 1 ] suggeriscono che questa sia la procedura corretta

Il mio script di avvio:

#!/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 & 

Lo script funziona perfettamente se eseguito manualmente. Tuttavia, quando viene eseguita da cron, vengono eseguiti solo l'istruzione echo

il task crontab è

 @reboot /path/to/startupScript.sh 

Come risolvere questo problema?

La voce crontab corretto recita:

 USER=username PATH=content of $PATH @reboot /path/to/startupScript.sh 

  • Running script in Crontab each 3 giorni una volta
  • controllare se il process è in esecuzione, anche sotto cron
  • Come rendere disponibili i cronjobs elevati?
  • Scrittura di un sistema di bloccaggio
  • cron lavoro occasionalmente non in esecuzione
  • copiare i lavori di cron da un server a un altro server - utilizzando bash prefereable
  • La seguente espressione cron significa each 45 minuti?
  • 403 errore proibito da cron
  • 3 Solutions collect form web for “albind automaticamente il volume EBS ad un'istanza Spot”

    La ragione più probabile per cui i comandi non functionrebbero quando viene richiamato da uno script crontab è che non si trovano nella variabile di ambiente PATH. Le voci di Crontab eseguono per impostazione predefinita un insieme minimo di variables di ambiente.

    Mentre il cron potrebbe sicuramente get il lavoro fatto, il modo canonico per farlo è quello di specificare uno script user-data che viene eseguito quando viene lanciato l'istanza spot. Con l' request-spot-instance di request-spot-instance AWS CLI è specificato in JSON utilizzando l'argomento --launch-specification .

    http://docs.aws.amazon.com/cli/latest/reference/ec2/request-spot-instances.html

    Questa sezione può essere un piccolo script di shell e consente di modificare il volume-id se ciò sia mai necessario, invece di codificarlo in AMI.

    perché non metti questo in userdata anziché cron? ecco perché sono fatti per: eseguire un codice all'avvio. Utilizzando cron, si esporrà a problemi di path che probabilmente non avnetworking con userdata

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.