以 sudo 身份运行时将环境变量传递给另一个用户

以 sudo 身份运行时将环境变量传递给另一个用户

我在 RHEL5 机器上安装 Tomcat,启动时遇到了一些问题,因为没有设置 JAVA_HOME。Tomcat 正在使用

sudo /sbin/service tomcat start

并在用户下运行tomcat。当我以自己或 root 用户身份登录时,JAVA_HOME已正确设置(使用/etc/profile.d/java.sh)。我猜想 sudo 未正确传递此信息。

有人能指出我需要做出哪些改变才能让这个变量通过 sudo 传递或被用户获取吗tomcat?我相信有很多方法。

提前致谢

富有的

答案1

一种方法是将 JAVA_HOME 添加到 tomcat 启动脚本中,该脚本应该位于 /etc/init.d 中

答案2

mazianni 的回答是正确的。

更多信息:

对于非交互式 shell 来说,/etc/profile不会被读取,因此/etc/profile.d/*.sh也不会被读取。

JAVA_HOME在您的交互式 shell 中设置。sudo删除大多数环境变量。您可以配置env_keepin/etc/sudoers以允许JAVA_HOME通过,但如果您将 tomcat 设置为自动启动,则此方法将不再有效。(因此 mazianni 的解决方案是最好的。)

答案3

尝试sudo -E <your command>。这可以保留(大部分)环境。man sudo有关更多信息,请参阅。

答案4

man sudoers

使用visudo(永远不要/etc/sudoers直接编辑!),您可以选择设置!env_reset为全局允许(大多数)环境变量通过sudo,或者添加env_keep应该保留的特定变量。

相关内容