AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 62178
In Process
Wendy
Wendy
Asked: 2009-09-04 12:53:49 +0800 CST2009-09-04 12:53:49 +0800 CST 2009-09-04 12:53:49 +0800 CST

如何指定root的环境变量?

  • 772

我做 Rails 开发。在这个应用程序中,我需要指定环境变量LD_LIBRARY_PATH = /usr/local/oracle/lib,但是当我使用 sudo 脚本/服务器运行应用程序时,它不会运行,因为该库路径不在 root 的 env 中。

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

environment-variables root sudo bashrc
  • 8 8 个回答
  • 29095 Views

8 个回答

  • Voted
  1. Fab
    2011-03-11T17:33:04+08:002011-03-11T17:33:04+08:00

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

    默认值 env_reset
    默认值 env_keep = "颜色显示主机名 HISTSIZE INPUTRC KDEDIR \
                            LS_COLORS 邮件 PS1 PS2 QTDIR 用户名 \
                            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 LANGUAGE LINGUAS \
                            _XKB_CHARSET XAUTHORITY"
    

    为了让我的环境变量在那里,我必须在“XAUTHORITY”之后添加它的名称。在您的情况下,您将拥有:

    默认值 env_keep = "颜色显示主机名 HISTSIZE INPUTRC KDEDIR \
                            LS_COLORS 邮件 PS1 PS2 QTDIR 用户名 \
                            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 LANGUAGE LINGUAS \
                            _XKB_CHARSET XAUTHORITY LD_LIBRARY_PATH"
    

    试试看。

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

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

    • 6
  2. Catherine MacInnes
    2009-09-04T16:28:14+08:002009-09-04T16:28:14+08:00

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

    • 1
  3. Nakedible
    2009-11-19T04:31:56+08:002009-11-19T04:31:56+08:00

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

    例如:

    • 如果 bash 是您的 root shell,它将.bashrc在启动时读取
    • 如果 bash 是您的根 shell,并且它是“登录”shell,它将.bash_profile在启动时读取
    • 如果您通过 ssh 登录,它也将.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则应阅读最近发行版中的每个进程。

    • 1
  4. Insyte
    2009-09-04T12:59:33+08:002009-09-04T12:59:33+08:00

    有一些方法可以将它添加到您的脚本中,但我建议一种更简单、更强大的方法是直接将路径添加到动态链接器的配置中:

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

    将您在问题中提到的路径添加到该文件并运行sudo ldconfig.

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

    • 0
  5. DictatorBob
    2009-09-04T13:23:37+08:002009-09-04T13:23:37+08:00

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

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

    • 0
  6. cagenut
    2009-09-04T14:33:15+08:002009-09-04T14:33:15+08:00

    如果这是一个 redhat-family 发行版:

    echo 'export LD_LIBRARY_PATH=/usr/local/oracle/lib' > /etc/profile.d/oracle
    
    • 0
  7. James Woest
    2009-09-04T20:06:14+08:002009-09-04T20:06:14+08:00

    你有没有试过这个:

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

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

    • 0
  8. kisoku
    2009-11-19T01:37:14+08:002009-11-19T01:37:14+08:00

    您可以尝试从 rails 进程中设置环境变量尝试在 $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 语句之前,您可能需要确保已设置好此项。

    • 0

相关问题

  • 如何将 VAR 从子 shell 导出到父 shell?

  • Windows 环境变量:“默认用户”与“系统”

  • 为什么返回 %ProgramFiles(x86)% 时不带引号?

  • 如何在不重新启动的情况下添加 Windows 环境变量?

  • 在 .bashrc 中设置环境变量的最佳方法是什么?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve