Java 非交互式bash shell的环境变量
我们有一个非交互式bashshell命令,它执行一些代码,这些代码读取一些环境变量Java 非交互式bash shell的环境变量,java,linux,bash,shell,unix,Java,Linux,Bash,Shell,Unix,我们有一个非交互式bashshell命令,它执行一些代码,这些代码读取一些环境变量 #!/bin/bash export PATH="/usr/sbin:/sbin:/usr/lib/ambari-server/*:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/var/lib/ambari-agent" export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/usr/hdp/current/h
#!/bin/bash
export PATH="/usr/sbin:/sbin:/usr/lib/ambari-server/*:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/var/lib/ambari-agent"
export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-"/usr/hdp/current/hadoop-client/conf"}
export JAVA_HOME=${JAVA_HOME:-"/usr/java/default"}
export LANG="en_US.UTF-8"
export NM_HOST="test.com"
export LOGNAME="root"
export JVM_PID="$$"
export PWD="/opt/hadoop/yarn/local/usercache/root/appcache/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002"
export LOCAL_DIRS="/opt/hadoop/yarn/local/usercache/root/appcache/application_1504729685201_0003"
export SHDP_CONTAINERID="container_e11_1504729685201_0003_01_000002"
export NM_HTTP_PORT="8042"
export LOG_DIRS="/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002"
export NM_AUX_SERVICE_mapreduce_shuffle="AAA0+gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
"
export NM_PORT="45454"
export USER="root"
export HADOOP_YARN_HOME=${HADOOP_YARN_HOME:-"/usr/hdp/current/hadoop-yarn-nodemanager"}
export CLASSPATH="/org/test/import/application.yml:./*"
export HADOOP_TOKEN_FILE_LOCATION="/opt/hadoop/yarn/local/usercache/root/appcache/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/container_tokens"
export NM_AUX_SERVICE_spark_shuffle=""
export LOCAL_USER_DIRS="/opt/hadoop/yarn/local/usercache/root/"
export HADOOP_HOME="/usr/hdp/2.6.1.0-129/hadoop"
export HOME="/home/"
export NM_AUX_SERVICE_spark2_shuffle=""
export CONTAINER_ID="container_e11_1504729685201_0003_01_000002"
export MALLOC_ARENA_MAX="4"
ln -sf "/opt/hadoop/yarn/local/usercache/root/appcache/application_1504729685201_0003/filecache/11/application.yml" "application.yml"
hadoop_shell_errorcode=$?
if [ $hadoop_shell_errorcode -ne 0 ]
then
exit $hadoop_shell_errorcode
fi
ln -sf "/opt/hadoop/yarn/local/usercache/root/appcache/application_1504729685201_0003/filecache/12/test.jar" "test.jar"
hadoop_shell_errorcode=$?
if [ $hadoop_shell_errorcode -ne 0 ]
then
exit $hadoop_shell_errorcode
fi
# Creating copy of launch script
cp "launch_container.sh" "/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/launch_container.sh"
chmod 640 "/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/launch_container.sh"
# Determining directory contents
echo "ls -l:" 1>"/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/directory.info"
ls -l 1>>"/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/directory.info"
echo "find -L . -maxdepth 5 -ls:" 1>>"/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/directory.info"
find -L . -maxdepth 5 -ls 1>>"/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/directory.info"
echo "broken symlinks(find -L . -maxdepth 5 -type l -ls):" 1>>"/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/directory.info"
find -L . -maxdepth 5 -type l -ls 1>>"/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/directory.info"
exec /bin/bash -c "$JAVA_HOME/bin/java -jar test.jar 1>/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/Container.stdout 2>/opt/hadoop/yarn/log/application_1504729685201_0003/container_e11_1504729685201_0003_01_000002/Container.stderr"
hadoop_shell_errorcode=$?
if [ $hadoop_shell_errorcode -ne 0 ]
then
exit $hadoop_shell_errorcode
我们在~/.bashrc文件中添加了代码所需的环境变量,但非交互式shell似乎不读取此文件,因此我们的代码无法获取所需的环境变量。不幸的是,我正在使用的bash脚本是自动生成的,我无法在那里导出我的env变量。有没有其他方法使env变量可用于我们的java代码?谢谢。可以在/etc/hadoop/conf/warn-site.xml中配置特定需要的环境变量,其中有一个属性,即warn.nodemanager.admin-env,用于列出应从nodemanager环境转发到容器环境的环境变量。 默认情况下,值为MALLOC\u ARENA\u MAX=$MALLOC\u ARENA\u MAX,您只需添加一个逗号分隔的列表,其中包含需要传递的变量: 例如 MALLOC_ARENA_MAX=$MALLOC_ARENA_MAX,您的_变量=$YOUR_变量 这也可以通过纱线站点高级配置部分中的Ambari配置纱线 使用/etc/profile.d/中的脚本设置全局环境变量是一种很好的做法,可供所有用户使用 参考资料: -纱线站点默认配置
- 环境变量#全系统环境变量部分
.bashrc
,这是正确的。您实际上是如何运行脚本的?不相关,但是调用/bin/bash
似乎没有必要exec“$JAVA_HOME/bin/JAVA”-jar test.jar
也可以。实际上,整个代码都在一个.sh文件中,这个文件是由spring Thread框架自动生成和执行的。我不熟悉这个框架,但是如果它没有提供一种方法来指定它将执行的命令的环境,我会非常惊讶。再次问同样的问题,因为它已关闭,而您不同意关闭不是一个选项。正确的方法是投票支持它重新开放。