【问题标题】:AWS EC2 User Data: Commands not recognized when using sudoAWS EC2 用户数据:使用 sudo 时无法识别命令
【发布时间】:2019-07-09 00:14:36
【问题描述】:

我正在尝试创建一个 EC2 用户数据脚本以在启动时运行其他脚本。但是,我运行的脚本无法识别我已经声明的一些命令和变量。我以“ubuntu”用户身份运行命令,但它仍然无法正常工作。

我的用户数据脚本如下所示:

export user="ubuntu"
sudo su $user -c ". ./run_script"

在脚本中,我有以下几行:

THIS_PATH="/some/path"
echo "export SOME_PATH=$THIS_PATH" >> ~/.bashrc

source ~/.bashrc

但是,脚本无法运行SOME_PATH/application,而echo $SOME_PATH 这将返回一个空行。我很困惑,因为当我使用 SSH 登录 EC2 时,$SOME_PATH/application 有效,而我使用 whoami 的调试日志返回“ubuntu”。

我在这里遗漏了什么吗?

【问题讨论】:

  • 用户数据脚本以root 用户身份运行。尝试简单地创建文件而不使用sudo,但您需要将文件chown 发送给所需的用户,以便他们可以访问它们。
  • 调用sudo时是否已经创建了用户ubuntu?试试sudo su ubuntu -c "touch /tmp/sudo_test" 看看是谁创建了那个文件。看find / -name .bashrc的修改日期改了哪一个(从root?sudo su - $user ...之后这个变了吗?)
  • 致 John:我可以使用 root 和 ubuntu 用户创建文件。对沃尔特:是的。

标签: bash amazon-web-services amazon-ec2


【解决方案1】:

您的数据脚本以 root 身份执行,su 命令保留 $HOME 和其他 ENV 变量不变(注意 sudo 是多余的)。 "su -" 也无济于事

所以,不要使用 ~ 或 $HOME 而是使用完整路径 /home/ubuntu/.bashrc

【讨论】:

  • 我认为这不是路径错误。我已经尝试过您的解决方案,但它不起作用。
【解决方案2】:

我发现了问题。似乎 source ~/.bashrc 不足以重新启动 shell——环境变量在我在另一个 bash 脚本中引用它们之后才起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2020-08-28
    • 2011-10-25
    • 2020-06-11
    • 2016-09-12
    • 2018-06-09
    • 2015-05-03
    相关资源
    最近更新 更多