【问题标题】:Environment variables in ec2 don't show up with sudo?ec2中的环境变量不显示sudo?
【发布时间】:2021-09-20 03:21:47
【问题描述】:

我有一个运行节点应用程序的 ec2 实例。

如果我只使用 nodemon app.js 运行我的应用程序。我在 Ec2 实例的 .bashrc 中设置的环境变量按预期被我的应用程序拾取。如果我和sudo 一起跑步,它们就会消失在风中,再也见不到了。说真的,它们要去哪里?我如何确保它们出现?

【问题讨论】:

  • 当您说“EC2 实例的 .bashrc”时,您可能指的是 ec2 用户帐户的 .bashrc。 .bashrc 文件在/home/ec2-user 中吗?当你使用 sudo 运行某些东西时,你是以root 而不是ec2-user 运行它。您可能需要改为编辑 /etc/profile,这将应用于系统上的所有用户帐户。

标签: amazon-web-services amazon-ec2 aws-cli


【解决方案1】:

当您运行sudo 时,您实际上是以root 用户身份启动一个新环境,因此您当前shell 中存在的任何环境变量都不会被传递。有三种方法可以解决这个问题。

1.告诉 sudo 保护环境

sudo 有一个方便的参数-E--preserve-env,它将把你所有的环境变量传递到sudo 环境中。

2。只传递你需要的变量

更好的方法是只传递您想要保留的环境变量,而不是传递所有内容。有两种方法可以完成此操作,首先您可以将环境变量名称列表提供给--preserve-env 参数。例如:

sudo --preserve-env=HOME /usr/bin/env

最后你也可以直接在sudo命令中设置环境变量,像这样:

sudo ZEBRA=true /usr/bin/env

注意,我们使用的是上面的 /usr/bin/env 命令,它只是简单地回显了所有的环境变量。

3.将您的环境变量存储在/root/.bashrc/etc/profile

【讨论】:

    【解决方案2】:

    所以我想出了问题的答案。上面的答案似乎足够了。快速的答案是: 简单地说,当您运行 sudo 时,您是以超级用户/root 用户身份运行的,而不是 ec2 用户。所以变量不可用。为了使它们可用,我像这样回应它们。

    sudo ENV_VAR=$(sudo echo $ENV_VAR_IN_BASHRC) PORT=443 NODE_ENV=production forever start ./

    它对我有用。

    【讨论】:

    • 那么你应该接受上面的答案。
    猜你喜欢
    • 2018-06-08
    • 1970-01-01
    • 2017-03-30
    • 2013-08-16
    • 2016-01-26
    • 2011-12-26
    • 2021-10-15
    • 2021-08-30
    • 2023-03-27
    相关资源
    最近更新 更多