5

Grundsätzlich bin ich nicht sicher, wie ich meine AWS-Befehle in Crontab ausgeführt werden soll. Ich weiß, dass ich crontab einige Umgebungsvariablen geben muss, damit es die aws-Befehle ausführen kann, aber ich weiß nicht genau, wie ich das machen soll. Hat jemand das schon mal machen können?EC2_HOME ist nicht festgelegt. Führen AWS-Befehle von Cron

PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin:/opt/aws/bin 
* * * * * export EC2_HOME=/opt/aws/apitools/ec2 
* * * * * export JAVA_HOME=/usr/lib/jvm/jre 
0 8 * * 1-5 ec2-start-instances instance_id 
0 7 * * 1-5 ec2-start-instances instance_id 
0 7 * * 1-5 ec2-start-instances instance_id 

Ich bin auf einer EC2 Amazon Maschine und ich kann die AWS-Befehle in der EC2-Benutzer-Shell ausführen. Ich habe nur Probleme, die Befehle von crontab ausführen zu lassen.

Die Mail an die EC2-Benutzer gesendet sagt "/ opt/aws/bin/EC2-Start-Instanzen: Linie 9: EC2_HOME: EC2_HOME ist nicht gesetzt"

Antwort

8

Dies ist für Sie sollten ... arbeiten mit automatisierten:

Edit: Wenn Ihr Problem ist einfach die env für Aufträge von cron Einstellung, werfen Sie einen Blick auf cron git pull scripts, die dann crontab/anacron run-parts bash-scripts ausführen, die ec2-java-tools aufrufen. Normalerweise in einer amz-linux-ami (ihr RH-Klon) die Erstellung von env vars geht wie folgt:

(zu dem relevanten Dateien halten zu gehen)

Do Shell Login ->source /etc/profile die Schleife durch/etc/profile.d und source *.{users shell extension} in diesem Fall aws-apitools-common.sh

$cat aws-apitools-common.sh 
export AWS_PATH=/opt/aws 
export PATH=$PATH:$AWS_PATH/bin 
#Prefer JDK if present (i pulled the condition to de-clutter this info) 
export JAVA_HOME=/usr/lib/jvm/java 
export JAVA_HOME=/usr/lib/jvm/jre 

Hier ist die entsprechende Zeile:

for aws_product in $(find /opt/aws/apitools /opt/aws/amitools -maxdepth 1 -type l 2>/dev/null); do 
[ -e $aws_product/environment.sh ] && source $aws_product/environment.sh; done 

So das Skript aws-apitools-common.sh sucht nach Apitools und Amitools, dann Quellen diese Tools $aws_product/environment.sh. ex: source /opt/aws/apitools/ec2/environment.sh

Nun ist dies wahrscheinlich das, was Sie für (/opt/aws/apitools/ec2/environment.sh) suchen:

$cat environment.sh 
# Set EC2_HOME. Called from /etc/profile.d/aws-product-common 
[ -z "$EC2_HOME" ] && EC2_HOME="/opt/aws/apitools/ec2" 
export EC2_HOME 

Kurz gesagt, die Umwelt Vars Sie/Export setzen wollen in Ihrem Crontab-Skript und/oder in Ihren anacron-Run-partited-Skripten (persönlich lade ich key.conf-Dateien, die aus einem Git-Repo generiert werden, und lasse jeden Tag ein Feuer ziehen, damit Schlüssel und das Env-Cat aktualisiert werden genau wie die Skripte selbst. Dann ruft das Auftragsskript die Datei conf auf:

AWS_ACCESS_KEY="blah-blah-dingle-smith" 
AWS_SECRET_KEY="yankee-doodle-shit-no-stank" 
JAVA_HOME="/usr/lib/jvm/java" 
EC2_HOME="/opt/aws/apitools/ec2" 
EC2_URL="https://us-west-2.ec2.amazonaws.com/" 
PATH="$PATH:/opt/aws/bin" # is dir contains a symlinks of tool binaries 

Prost!

+0

oops sicher sein, diese vars zu exportieren: 'export AWS_ACCESS_KEY AWS_SECRET_KEY EC2_URL JAVA_HOME EC2_HOME EC2_URL PATH' wenn Sie die Quelle conf route gehen, wahrscheinlich, um den Export dort nicht auszuführen. – jonretting

+0

Ändern Sie auch die Shell in/etc/crontab 'SHELL =/bin/bash' und// etc/anacrontab' SHELL =/bin/bash' Ich vertraue Shebangs nicht, besonders wenn cronie involviert wird. – jonretting

0

Zuerst Sie auf die neue AWS CLI-Upgrade sollte .

Dann können Sie Ihre Zugangsschlüssel und geheimen Schlüssel in ~/.aws/config, und Sie werden kein Problem haben. Die neuen Tools unterstützen mehrere Profile und verlassen sich nicht auf env-Variablen. Benötigt die Einrichtung ein paar Systeme

Where can I set environment variables that crontab will use?

+1

Ich bin auf einer Amazon EC2-Maschine und ich bin in der Lage, die aws Befehle in der EC2-User-Shell auszuführen. Ich habe nur Probleme, die Befehle von crontab ausführen zu lassen. – goopcat

0

Ich fand this answer on the AWS Developer Forum, die für mich arbeiteten. Gerade hier kopiert es, um es einfacher zu erreichen:

Sie /opt/elasticbeanstalk/support/envvars Quelle können die üblichen Umgebungsvariablen zu setzen (RDS_HOSTNAME usw.).Der folgende Eintrag für cron arbeitet für uns:

30 2 * * * root . /opt/elasticbeanstalk/support/envvars && php /var/www/bin/some_command.php