【问题标题】:Environment variables in /etc/profile not work for HBase on Ubuntu 12.04LTS/etc/profile 中的环境变量不适用于 Ubuntu 12.04LTS 上的 HBase
【发布时间】:2014-04-25 08:16:31
【问题描述】:

我正在尝试在运行 Ubuntu 12.04LTS 的桌面上以伪分布式模式部署 HBase。

安装后,当我尝试通过以下方式启动 hbase-master 时:

sudo service hbase-master start

上面写着JAVA_HOME 未找到。

但我确实在/etc/profile 中配置了我的JAVA_HOME

我在谷歌上搜索,发现有人说sudo service xxx start 使用的是login shell/etc/profile 中的变量不能用于登录 shell 吗?

我还尝试从另一台计算机通过 ssh 登录以证明 /etc/profile 不起作用:

ssh myuser@mypc 'echo $JAVA_HOME > /tmp/tmp.log'

我发出上面的 ssh 命令后没有任何显示。

我还尝试在~/.bashrc/root/.bashrc 中配置JAVA_HOME。也没有用。

但是我在hbase启动脚本中设置JAVA_HOME后,hbase实例就可以启动成功了。这意味着 hbase 已正确安装在我的桌面上。所以问题肯定出在环境配置上。

谁能告诉我我的环境配置有什么问题?谢谢。

【问题讨论】:

    标签: linux shell ubuntu ssh hbase


    【解决方案1】:

    根据sudoers(5)

    默认情况下,env_reset 选项处于启用状态。这会导致在新的最小环境中执行命令。在 AIX(和没有 PAM 的 Linux 系统)上,使用 /etc/environment 文件的内容初始化环境。

    作为一种特殊情况,如果指定了sudo的-i选项(初始登录),sudoers将初始化环境而不管env_reset的值。 DISPLAY、PATH 和 TERM 变量保持不变; HOME、MAIL、SHELL、USER 和 LOGNAME 是根据目标用户设置的。在 AIX(和没有 PAM 的 Linux 系统)上,/etc/environment 的内容也包括在内。

    这意味着您应该将 JAVA_HOME 设置放入 /etc/environment 或将 sudo 运行为 sudo -i ...

    【讨论】:

    • 我可以source /etc/profile int /etc/environment 以便可以在一个文件中配置变量,这样更易​​于管理。
    • @WeiboLi 恐怕你做不到。试试sudo -i。如果这可行并且您总是想要sudo -i 而不是sudo,您可以将sudo 别名为sudo -i
    • 如果我通过sudo -i启动服务,下次系统重启时,服务能否找到正确的环境变量并自动启动?
    • @WeiboLi 不,不能。如果您希望您的服务自动启动,您需要将其添加到自动启动服务列表中(在 Debian 上,您可以使用 rcconf 将其添加到正确的运行级别,我不确定如何在 Ubuntu 上执行此操作),然后添加对其初始化文件进行所有必要的设置。
    猜你喜欢
    • 2022-01-07
    • 2017-06-24
    • 2020-01-24
    • 2014-12-18
    • 2021-01-14
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多