我已在我的计算机上安装了 ServiceMix,并正在尝试启动它。启动脚本称为start.sh。当我这样做时./start.sh
,它给了我一条“权限被拒绝”消息。所以我使用了sudo ./start.sh
,它可以很好地启动服务器。
然而,当我想使用Java 6(出于各种原因)时,它似乎正在使用Java 7。我查看了start.sh脚本,发现它使用了该JAVA_HOME
变量。所以我将 JAVA_HOME 设置为 JDK 6 目录。
不过,ServiceMix 仍然使用 Java 7。
Google 搜索显示,当使用 sudo 运行命令时,sudo 会删除某些环境变量。所以我做了sudo -E ./start.sh
。它再次使用 JDK 7。
我打开start.sh并添加一行,echo $JAVA_HOME
看看变量是否设置正确。的输出echo
是一个空行。
我尝试修改 /etc/sudoers 文件以包含Defaults env_keep += "JAVA_HOME"
。执行 start.sh 现在告诉我我的 echo 语句再次是一行空行。ServiceMix 仍然使用 JDK 7。
我尝试在/etc/profile
.现在执行 start.sh 告诉我,我的 echo 语句又是一个空行。同样,ServiceMix 使用 JDK 7。
我在这里犯了什么错误?
FWIW,我使用的是 Mac OS X 10.8.2。echo $SHELL
在我的终端上返回/bin/bash。当我使用sudo su
and fire时echo $SHELL
,它返回 /bin/sh。
答案1
我建议您尝试以下步骤:
在
/etc/profile.d
目录内,创建一个名为 file 的文件,set_java_path.sh
其中包含以下行export JAVA_HOME=<_complete_path_to_java6_directory_>
运行
bash
命令一次以使上述更改加载。并运行start.sh
脚本。
编辑:
如果该/etc/profile.d
目录不存在,请创建一个名称相同的目录(权限:0755 & 所有者和组为 root)并在文件中/etc/profile
添加以下代码:
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
答案2
要将环境变量保留为 sudoer,请添加Defaults env_keep += PATH
到 sudoer 文件 ( sudo visudo
)。