如何指定root的环境变量?

如何指定root的环境变量?

我从事 rails 开发。在这个应用程序中,我需要指定环境变量LD_LIBRARY_PATH = /usr/local/oracle/lib,但是当我使用 sudo script/server 运行应用程序时,它不会运行,因为该库路径不在 root 的环境中。

我该怎么做才能让它工作?我尝试将路径放在根目录下./bashrc,但没有成功。

答案1

我遇到了类似的问题。我查看了我的/etc/sudoers文件,看到了以下几行:

默认 env_reset
默认值 env_keep = “颜色显示主机名 HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS 邮件 PS1 PS2 QTDIR 用户名 \
                        语言 LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_测量 LC_消息 LC_MONETARY LC_名称 LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL 语言 语言\
                        _XKB_CHARSET 权限”

为了使我的环境变量存在,我必须在“XAUTHORITY”后添加其名称。对于您的情况,您需要:

默认值 env_keep = “颜色显示主机名 HISTSIZE INPUTRC KDEDIR \
                        LS_COLORS 邮件 PS1 PS2 QTDIR 用户名 \
                        语言 LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                        LC_测量 LC_消息 LC_MONETARY LC_名称 LC_NUMERIC \
                        LC_PAPER LC_TELEPHONE LC_TIME LC_ALL 语言 语言\
                        _XKB_CHARSET XAUTHORITY LD_LIBRARY_PATH”

尝试一下。

另请确保您已BASH_ENV="~/.bashrc"设置/etc/environment

有关详细信息,请参阅其他答案

答案2

在这里,您访问根用户的方式很重要。不同的“登录”方法会创建不同的环境。

例如:

  • 如果 bash 是你的 root shell,它将.bashrc在启动时读取
  • 如果 bash 是你的 root shell,并且它是一个“登录”shell,它将.bash_profile在启动时读取
  • 如果你通过 ssh 登录,它也会.ssh/environment使用
  • 如果您通过登录(即从控制台登录),/etc/pam.d/login将使用 pam_env.so 在命令行上读取 /etc/security/pam_env.conf(取决于发行版)和 /etc/environment(如果有 readenv=1)
  • ETC。

因此,如果您没有获得所需的环境 - 您需要找出引导您启动软件的登录链。这可能是这样的:gdm (X) 登录 -> 终端仿真器 -> bash shell -> su -> bash shell (root) -> 软件。

然而,如果您只是想做出最好的猜测,/etc/environment应该阅读最近分布中的每个过程。

答案3

疯狂的想法,但你确定服务器确实以 root 身份运行吗?有些服务器指定了它们在其下运行的帐户,因此即使你以 root 身份调用启动脚本,它们实际上也是以另一个用户身份运行的。

答案4

如果这是 redhat 系列发行版:

echo 'export LD_LIBRARY_PATH=/usr/local/oracle/lib' > /etc/profile.d/oracle

相关内容