Java 如何在Ubuntu中为系统用户设置环境变量?

Java 如何在Ubuntu中为系统用户设置环境变量?,java,ubuntu,glassfish,environment-variables,glassfish-3,Java,Ubuntu,Glassfish,Environment Variables,Glassfish 3,我已经为我的glassfishv3安装创建了一个系统用户,该用户没有交互式shell,因此当通过asadmin启动glassfish时,不会在此用户上设置任何环境变量 我已尝试在init脚本中使用以下命令在环境中进行复制: jhv=$(grep JAVA_HOME /etc/environment) $jhv export JAVA_HOME sudo -u glassfish -E $glassfishpath/asadmin start-domain domain1 asadmin

我已经为我的glassfishv3安装创建了一个系统用户,该用户没有交互式shell,因此当通过asadmin启动glassfish时,不会在此用户上设置任何环境变量

我已尝试在init脚本中使用以下命令在环境中进行复制:

jhv=$(grep JAVA_HOME /etc/environment)
$jhv
export JAVA_HOME    
sudo -u glassfish -E $glassfishpath/asadmin start-domain domain1
asadmin I echo$JAVA\u HOME内部正确打印了JAVA\u HOME

一旦glassfish启动,我将使用一个方法启动一个web服务,该方法将打印环境键值对。爪哇之家不在其中。这会导致glassfish执行的任何需要JAVA_HOME的脚本出现问题


那么,如何在系统用户/glassfish环境中设置JAVA_HOME,使其在JAVA容器启动后保持不变?

通常,解决方案是在sudo命令中添加-E标志。这个标志告诉sudo在进入root访问时维护当前用户的环境变量


看起来你已经在使用这个标志了,所以我不知道问题出在哪里。可能是该标志在脚本中以静默方式失败,并且没有通知您。您是否尝试过在shell中运行脚本的命令手册?结果/输出是什么?

我对GF不熟悉。启动web服务需要什么?另外,如何打印键值对?@Ryan Stewart-glassfish作为java web容器可以承载java web服务。容器已知的应用程序web服务在客户端调用时创建或初始化。至于您的另一个问题:Java能够使用System.getenv获取环境变量;它返回环境条目的映射。通过对条目进行迭代,您可以将键值对附加到字符串,然后从服务返回字符串作为响应。我只是没用过GF。我主要和Tomcat一起工作。除非GF与我使用过的其他容器有很大不同,否则它实际上不会为web服务生成单独的操作系统进程,对吗?您只是在部署WAR吗?您在web服务中使用了什么代码来获取JAVA_HOME?问题是JAVA_HOME在sudo运行的asadmin脚本中设置正确。这意味着-E在工作,但是值在某处丢失了。