我从事 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