2017-11-25 2 views
0

Ich führe diesen Code beim Start ec2-Instanz, Python ist installiert, aber der Ordner ist nicht erstellt.ec2 launch Bash Befehl funktioniert nicht

#!/bin/bash 

sudo yum update -y 

sudo yum install python36 -y 

mkdir venv 

cd venv 

virtualenv -p /usr/bin/pyton3.6 python36 

echo "source /home/ec2-user/venv/python36/bin/activate" > /home/ec2-user/.bashrc 

pip install boto3 
+1

Scripts in Benutzerdaten installieren pip als root ausführen. Sie könnten also an dem falschen Ort nach dem venv-Verzeichnis suchen. Können Sie den vollständigen Pfad mit mkdir hinzufügen, z. mkdir/home/ec2-benutzer/venv? – sudo

Antwort

3

Ein paar Dinge könnten mit diesem Skript falsch laufen. Ich schlage vor, eine robustere Art und Weise, es zu schreiben:

#!/bin/bash 

cd "$(dirname "$0")" 

sudo yum update -y 
sudo yum install python36 -y 

if [ ! -d venv ]; then 
    mkdir venv 
    virtualenv -p /usr/bin/pyton3.6 venv/python36 

    echo "source venv/python36/bin/activate" >> ~/.bashrc 

    source venv/python36/bin/activate 
    pip install boto3 
fi 

Verbesserte Punkte:

  • Stellen Sie sicher, wir im richtigen Verzeichnis sind, durch eine cd in das Verzeichnis des Skripts zu tun
  • Do not hard das Benutzerverzeichnis Lage, verwenden ~
  • Sie ~/.bashrc nicht gestutzt, wenn bereits
  • existiert 012 vor der Installation, ist es wichtig, die virtuelle env zu aktivieren, sonst pip es in der virtuellen env nicht installiert werden (es wird versuchen, systemweit zu installieren) für Eingänge
+0

Da dies ein EC2-Startskript ist, befindet es sich in 'userdata', und das bedeutet, dass das Skript tatsächlich als root ausgeführt wird, nicht als der ec2-Benutzer, der letztendlich der Benutzer ist, der den virtualenv verwendet. – jarmod

0

Danke. Das hat funktioniert. Hauptsächlich:

  • klare Pfade
  • virtuellen Umgebung aktivieren für boto3

‚#/bin/bash

sudo yum update -y

sudo yum install python36 installieren! -y

mkdir/home/ec2-benutzer/venv

cd/home/EC2-user/Venv

virtualenv -p /usr/bin/python3.6 python36

echo „Quelle/home/EC2-user/Venv/python36/bin/aktivieren ">> /home/ec2-user/.bashrc

Quelle/home/EC2-user/Venv/python36/bin/aktivieren

boto3