如何指定root的环境variables?

我做轨道发展。 在这个应用程序中,我需要指定环境variablesLD_LIBRARY_PATH = /usr/local/oracle/lib ,但是当我使用sudo脚本/服务器运行应用程序时,它不会运行,因为该库path不在root的环境中。

我该怎么做才能使它工作? 我试图把根目录下的path./bashrc ,它不工作。

我有一个类似的问题。 我查看了我的/etc/sudoers文件,我看到这些行:

默认值env_reset
默认值env_keep =“COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                         LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                         LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                         LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                         LC_PAPER LC_TELEPHONE LC_TIME LC_ALL语言LINGUAS \
                         _XKB_CHARSET XAUTHORITY“

为了让我的环境variables在那里,我不得不在“XAUTHORITY”后添加它的名字。 在你的情况下,你会有:

默认值env_keep =“COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
                         LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
                         LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
                         LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
                         LC_PAPER LC_TELEPHONE LC_TIME LC_ALL语言LINGUAS \
                         _XKB_CHARSET XAUTHORITY LD_LIBRARY_PATH“

试试看。

还要确保在/etc/environment设置了BASH_ENV="~/.bashrc"

看到这个其他答案更多的细节

疯狂的想法,但你确定服务器实际上运行为根? 一些服务器指定他们运行的帐户,所以即使您以root身份调用启动脚本,他们实际上是以另一个用户的身份运行的。

你已经到达你的根用户的方式在这里。 “login”的不同方法创build不同的环境。

例如:

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

所以,如果你没有得到你想要的环境 – 你需要找出将你引导到正在启动的软件的login链。 这可能是这样的:gdm(X)login – >terminal模拟器 – > bash shell – > su – > bash shell(root) – >软件。

但是,如果您只是想要做出最好的猜测,则应该为最近的发行版中的每个进程读取/etc/environment

有很多方法可以做到这一点,包括Insyte在上面提到的方法。

但是,如果你需要设置一个不属于/etc/ld.so.conf的环境variables,你也可以简单地把它放在/ etc / environment

如果这是一个红帽家庭发行版:

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

你有没有试过这个:

 sudo su - root -c "LD_LIBRARY_PATH=/usr/local/oracle/lib <command to start the app>" 

请注意,在设置环境variables和运行命令之间没有分号。

有一些方法可以将它添加到脚本中,但是我build议一个更简单,更可靠的方法是直接将path添加到dynamic链接器的configuration中:

 $ sudo编辑器/etc/ld.so.conf.d/railslibs

在你的问题中添加你提到的path,并运行sudo ldconfig

这应该使环境变得不必要。

你可以尝试在rails过程中设置环境variables,在$ RAILS_ROOT / config / environment.rb中添加如下的内容

 Rails::Initializer.run do |config| ENV['LD_LIBRARY_PATH'] = "/usr/local/oracle_client/v8_1_7/lib" end 

您可能需要确保在您为oracle数据库绑定添加require或gem语句之前设置此项。