作为sudo运行时,将环境variables传递给另一个用户

我正在RHEL5机器上安装Tomcat,并且在启动时遇到了一些麻烦,因为JAVA_HOME没有设置。 Tomcat正在开始使用

sudo /sbin/service tomcat start 

并在用户tomcat下运行。 当我以自己的身份或以root用户身份login时,正确设置JAVA_HOME (使用/etc/profile.d/java.sh )。 我猜这是由sudo没有正确传递。

有人能指出我需要做的变化的方向,以获得这个variables通过sudo通过或由tomcat用户拿起? 我相信有很多方法。

提前致谢

丰富

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

马齐亚尼的回答是正确的。

更多信息:

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

JAVA_HOME在交互式shell中设置。 sudo去掉大部分的环境variables。 你可以在/etc/sudoersconfigurationenv_keep来允许JAVA_HOME通过,但是如果你设置了tomcat来自动启动这个方法将不再起作用。 (因此马齐亚尼的解决scheme是最好的。)

试试sudo -E <your command> 。 这保留了(大部分)环境。 请参阅man sudo以获取更多信息。

您可以在执行BASH之前临时设置一个variables。 这将立即可用于命令。

JAVA_HOME=/path/to/java sudo /sbin/service tomcat start

man sudoers

使用visudo (绝对不要直接编辑/etc/sudoers !),你可以select设置!env_reset来全局允许(大多数)环境variables通过sudo ,或者增加env_keep来保存哪些特定的variables。