【问题标题】:Unable to run bash script via UserData in EC2 instance无法通过 EC2 实例中的 UserData 运行 bash 脚本
【发布时间】:2020-08-12 13:31:55
【问题描述】:

我正在启动一个 EC2 实例,当第一次启动该实例时,我正在尝试运行一些命令并使用 UserData 设置一些环境变量。我添加到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 命令也没有运行。 (所以我假设所有命令都没有执行)。

我做错了什么?

【问题讨论】:

  • 它实际上是作为一个子 shell 启动的,所以这些环境变量是不可访问的。我认为您可以尝试使用. ./script/location/script.sh 运行脚本。注意前面的点。
  • 嘿@MarkoE,使用用户数据编写的脚本的位置是什么?另外,我应该在用户数据中添加. ./script/location/script.sh 命令吗?
  • 如果您使用的是 Terraform,您可以选择复制它的位置。如果您是从 AWS 控制台执行此操作 - 不要。 :)
  • 对不起,但我无法理解如何做到这一点。我是 shell 脚本的新手,所以我很困惑。输入用户数据后,启动实例时不应该自动运行命令吗?另外,我没有使用 Terraform
  • 您的实例是否已启动并运行?如果是这样,您可以查看日志文件/var/log/cloud-init-output.log 并查看存在哪些错误(如果有)。您使用的是哪个 Linux 发行版?

标签: amazon-web-services amazon-ec2


【解决方案1】:

用户数据脚本以root 用户身份运行。

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

见:How to permanently set environmental variables - Unix & Linux Stack Exchange

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2018-04-07
    • 2020-10-16
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多