Amazon web services 无法通过EC2实例中的UserData运行bash脚本

Amazon web services 无法通过EC2实例中的UserData运行bash脚本,amazon-web-services,amazon-ec2,Amazon Web Services,Amazon Ec2,我正在启动一个EC2实例,当该实例第一次启动时,我尝试运行一些命令并使用设置一些环境变量。我添加到UserData的命令: #!/bin/bash sudo apt-get -y update sudo apt-get install gcc g++ build-essential sudo apt install -y zip awscli python3-pip python3.7 python3.7-dev python3.7 -m pip install --upgrade pip

我正在启动一个EC2实例,当该实例第一次启动时,我尝试运行一些命令并使用设置一些环境变量。我添加到
UserData
的命令:

#!/bin/bash
 
sudo apt-get -y update
sudo apt-get install gcc g++ build-essential
sudo apt install -y zip awscli python3-pip python3.7 python3.7-dev
python3.7 -m pip install --upgrade pip
pip3 install virtualenv
mkdir anomaly-detection

export DB_ADAPTER=postgresql+psycopg2
export DB_USER=dummy_user
export DB_PASSWORD=dummy_pwd
export DB_HOST=ec2-xx-xxx-xxx-xxx.eu-central-1.compute.amazonaws.com
export DB_NAME=dummy_db
启动实例后,我启动实例,当我检查环境变量时,它们没有设置,而且
mkdir
命令也没有运行。(所以我假设所有的命令都没有被执行)


我犯了什么错误?

用户数据脚本以
根用户身份运行

如果希望为登录时将存在的用户定义环境变量,则应在每个用户的
.profile
文件中定义它们。如果您总是以
ec2用户的身份登录
,那么将其添加到
/home/ec2 user/.profile
就足够了


请参阅:

它实际上是作为子shell启动的,因此无法访问这些环境变量。我认为您可以尝试使用
运行脚本/script/location/script.sh
。注意前导的点。嘿@MarkoE,使用userdata编写的脚本的位置是什么?另外,我应该添加
/用户数据中的script/location/script.sh
命令?如果您使用的是Terraform,您可以选择复制它的位置。如果您是从AWS控制台执行此操作,请不要:)对不起,我不明白怎么做。我不熟悉shell脚本,所以它让我感到困惑。一旦我输入了userdata,当实例启动时,这些命令不应该自动运行吗?另外,我没有使用TerraformIs来启动和运行您的实例?如果是这样,您可以查看日志文件
/var/log/cloud-init-output.log
,看看有哪些错误(如果有)。您正在使用哪个Linux发行版?