我做 Rails 开发。在这个应用程序中,我需要指定环境变量LD_LIBRARY_PATH = /usr/local/oracle/lib
,但是当我使用 sudo 脚本/服务器运行应用程序时,它不会运行,因为该库路径不在 root 的 env 中。
我应该怎么做才能让它工作?我试图将路径放在根目录下./bashrc
,但它没有用。
我做 Rails 开发。在这个应用程序中,我需要指定环境变量LD_LIBRARY_PATH = /usr/local/oracle/lib
,但是当我使用 sudo 脚本/服务器运行应用程序时,它不会运行,因为该库路径不在 root 的 env 中。
我应该怎么做才能让它工作?我试图将路径放在根目录下./bashrc
,但它没有用。
我有一个类似的问题。我查看了我的
/etc/sudoers
文件,看到了以下几行:为了让我的环境变量在那里,我必须在“XAUTHORITY”之后添加它的名称。在您的情况下,您将拥有:
试试看。
还要确保您设置
BASH_ENV="~/.bashrc"
在/etc/environment
.有关更多详细信息,请参阅此其他答案
疯狂的想法,但是您确定服务器实际上以 root 身份运行吗?一些服务器指定了它们运行的帐户,因此即使您以 root 身份调用启动脚本,它们实际上也以另一个用户身份运行。
您到达根用户的方式在这里很重要。不同的“登录”方法会创建不同的环境。
例如:
.bashrc
在启动时读取.bash_profile
在启动时读取.ssh/environment
使用/etc/pam.d/login
将使用 pam_env.so 读取 /etc/security/pam_env.conf(取决于发行版)和 /etc/environment(如果存在 readenv=1)命令行所以,如果你没有得到你想要的环境——你需要弄清楚引导你进入你正在启动的软件的登录链。这可能类似于:gdm (X) login -> terminal emulator -> bash shell -> su -> bash shell (root) -> software。
但是,如果您只是想做出最好的猜测,
/etc/environment
则应阅读最近发行版中的每个进程。有一些方法可以将它添加到您的脚本中,但我建议一种更简单、更强大的方法是直接将路径添加到动态链接器的配置中:
将您在问题中提到的路径添加到该文件并运行
sudo ldconfig
.那应该使环境变得不必要。
有很多方法可以做到这一点,包括上面 Insyte 建议的一种。
但是,如果您需要设置一个不属于 /etc/ld.so.conf 的环境变量,您也可以简单地将它放在 /etc/environment
如果这是一个 redhat-family 发行版:
你有没有试过这个:
请注意,设置环境变量和运行命令之间没有分号。
您可以尝试从 rails 进程中设置环境变量尝试在 $RAILS_ROOT/config/environment.rb 中添加类似下面的内容
在为 oracle 数据库绑定添加 require 或 gem 语句之前,您可能需要确保已设置好此项。