問題の説明
私の側には4つのホストがあり、4つのホストは同じtomcaパスを持っています。psshコマンドツールを使用して4つのホストのTomcatを直接起動したいのですが、コマンドは次のとおりです。
[root@hadoop-master pssh]# pssh -P -h hosts.text /usr/local/tomcat/apache-tomcat-8.5.57/bin/startup.sh
例外は次のとおりです。
異常な問題:
hadoop-master: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
At least one of these environment variable is needed to run this program
問題分析
最初に環境変数を確認し、構成済みであることを確認します
[root@hadoop-master ~]# echo $JAVA_HOME
/usr/local/jdk/jdk1.8.0_261
コマンドはpsshを介して実行され、グローバル環境変数は使用できないことが疑われます
問題を解く
グローバル環境変数を設定できない場合は、tomcatの起動時に環境変数を設定するだけで済みます。テストにはホストhadoop-slave1を使用します。
まず、tomcatのbinディレクトリに移動して編集します
[root@hadoop-slave1 bin]# cd /usr/local/tomcat/apache-tomcat-8.5.57/bin
[root@hadoop-slave1 bin]# vim catalina.sh
ファイルの2行目に環境変数を追加します
#!/bin/sh
export JAVA_HOME="/usr/local/jdk/jdk1.8.0_261"
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
次に、wqを保存して終了します。次に、psshコマンドを実行します。
[root@hadoop-master pssh]# pssh -P -h hosts.text /usr/local/tomcat/apache-tomcat-8.5.57/bin/startup.sh
実行が成功したことがわかったら、hadoop-slave1にログインして確認します。
[root@hadoop-slave1 bin]# ps -ef|grep tomcat|grep -v grep
root 9820 1 0 18:13 ? 00:00:04 /usr/local/jdk/jdk1.8.0_261/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/apache-tomcat-8.5.57/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/apache-tomcat-8.5.57/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.57/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat/apache-tomcat-8.5.57 -Dcatalina.home=/usr/local/tomcat/apache-tomcat-8.5.57 -Djava.io.tmpdir=/usr/local/tomcat/apache-tomcat-8.5.57/temp org.apache.catalina.startup.Bootstrap start
Tomcatが正常に起動したことがわかりました。このように、他のサーバーのTomcatに同じ変更を加えることで問題を解決できます。
最終的な目標:
[root@hadoop-master pssh]# pssh -h hosts.text /usr/local/tomcat/apache-tomcat-8.5.57/bin/startup.sh
[1] 18:37:04 [SUCCESS] hadoop-slave2
[2] 18:37:04 [SUCCESS] hadoop-master
[3] 18:37:04 [SUCCESS] hadoop-slave1
[4] 18:37:04 [SUCCESS] hadoop-slave3