シェルスクリプトで環境変数が読めない

このQ&Aのポイント
  • シェルスクリプトで環境変数が読めないという問題について解決方法を教えてください。
  • CentOSで自宅サーバー構築中の問題で、tomcatを起動する際に環境変数が読めずにエラーが発生しています。
  • 起動スクリプトを使用してtomcatを起動する場合、環境変数が読めないエラーが発生しており、原因が分からない状況です。
回答を見る
  • ベストアンサー

シェルスクリプトで環境変数が読めない

Javaアプリケーションサーバー構築(Tomcat5) - CentOSで自宅サーバー構築: http://centossrv.com/tomcat5.shtml 上記のサイトでtomcatのインストールをしていて tomcat起動スクリプトを書き、 /etc/rc.d/init.d/tomcat start だとtomcatは正常に起動するのですが、 service tomcat start で起動すると Starting tomcat 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 というメッセージが表示されて、起動に失敗します スクリプト内で環境変数が読めていないように見えるのですが、 原因が分かりません。教えてください OSはCentOS 5.3です

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

serviceのman http://man.sourcentral.org/centos5/8+service に 「service runs a System V init script in as predictable environment as possible, removing most environment variables and with current working directory set to /.」 とある通り、serviceコマンドはほとんどの環境変数をクリアしてしまうので、それが原因だと思います。 serviceコマンドは単なるシェルスクリプトなはずなので、中身を読んでみるといいと思います。 serviceコマンドを使って起動できるようにするには、/etc/rc.d/init.d/tomcat の内容を工夫して書くようにする必要がありそうです。

libido
質問者

お礼

そうなんですか! serviceコマンドを調べればよかったんですね。 /etc/profile.dにtomcat.shファイルを作って 変数に入力するようにして解決しました。 回答ありがとうございます!

関連するQ&A

  • Tomcat のrestart時にメッセージが・・

    いつもお世話になっております 自宅サーバーを設置しておりTomcatをインストールしております。 Tomcatをリスタートするときに下記のメッセージが出るのですが これは、エラーメッセージなのでしょうか? -------------------------------------------------------- [root@digitalrain root]# /etc/rc.d/init.d/tomcat restart Stopping the tomcat service. The JAVA_HOME environment variable is not defined correctly This environment variable is needed to run this program Starting the tomcat service The JAVA_HOME environment variable is not defined correctly This environment variable is needed to run this program -------------------------------------------------------

  • tomcat5について

    tomcat5をコマンドプロンプトで起動させようとしたところ The JAVA_HOME environment variable is not defined correctly This environment variable is needed to run this program NB: JAVA_HOME should point to a JDK not a JRE とでます。 環境変数JAVA_HOMEを見てみると C:\Program Files (x86)\Java\jdk1.8.0_11; となっております。 ちなみにtomcatはDドライブにあります。 その他は、 C:\Program Files (x86)\Java\jdk1.8.0_11の中にjreフォルダがあるのですが C:\Program Files (x86)\Javaにjre8フォルダがあります(その中にはlib,binフォルダ) どこが間違っているのでしょうか?

  • シェルスクリプトの内容の確認

    Solarisのスクリプトについて教えてください。 以下のスクリプトファイルが登録されており、その内容の詳細を確認したいと思っております。 (1) 5行目の "$1" は何を意味しているのでしょうか? (2) 12行目の 「echo 」文内に「{ start | stop }」と記述がありますが、この start / stop はどの情報を元に判断して結果が出力されるのでしょうか? (3) 12行目の 「echo 」文のコマンドの後に、13行目「exit 1」と14行目「;;」がありますが、 これはどちらの行でcase文を抜けるということになるのでしょうか? ========================================================================================= #!/bin/sh # # /etc/init.d/nodemanager.sh # case "$1" in start) if [ -f /home/bea81/weblogic81/server/bin/startNodeManager.sh ] ; then /bin/su - weblogic -c 'cd /home/bea81/weblogic81/server/bin;./startNodeManager.sh &' fi ;; *) echo "Usage: /etc/rc2.d/S99nodemanager{ start | stop }" exit 1 ;; esac exit 0 ========================================================================================= よろしくお願いいたします。

  • CentOS6でJSPの環境構築について

    CentOS 6.0でサーブレットの環境を構築しています。 下記のURLの「■tomcat6のインストール」から「■ OSを起動した時にtomcat6を自動起動する」までを実行しましたがうまくできませんでした。 http://kajuhome.com/tomcat6.shtml 実行したコマンドは下記の通りです。 yum -y install java-1.6.0-openjdk yum -y install tomcat6 tomcat6-webapps tomcat6-admin-webapps vi /etc/tomcat6/tomcat6.conf ------------------------------------------------------------ JAVA_HOME="/usr/lib/jvm/java-1.6.0" TOMCAT_USER="root" ------------------------------------------------------------ vi /etc/tomcat6/server.xml ------------------------------------------------------------ <Connector port="80" protocol="HTTP/1.1" ------------------------------------------------------------ vi /etc/tomcat6/tomcat-users.xml ------------------------------------------------------------ <role rolename="manager"/> <user username="admin" password="password" roles="manager"/> ------------------------------------------------------------ ※<tomcat-users>と</tomcat-users>の間に追加しました。 /etc/rc.d/init.d/httpd restart /etc/rc.d/init.d/tomcat6 restart http://サーバーのIPアドレスをブラウザで入力して上記のサイトのようにtomcatの画面が表示されず、apacheの画面しか表示されません。 ここ1週間、何回もインストールしてやり直しても結果は変わらず悩んでいます。 どうか助けていただけませんでしょうか。 宜しくお願いします。

  • シェルスクリプトの正規表現

    こんばんは。 CentOSでサービスを再起動しようと思ったのですが、資料に書いてある 通りにスクリプトを作っても動きません(起動はできるけど 再起動、停止ができない)。 仕方がないのでプロセスをkillしたあとスクリプトを起動して再起動 する方法を取ろうとしていますが、最後の1歩で詰まりました。 echoでps -axをした結果を変数に入れて先頭の数字(PID)だけを 切り出そうとするのですが、プロセスIDが、空白+PID4桁の時と 空白なしPID5桁のときとあるので上手くHitさせることが出来ません。 mofu=`ps -ax|grep qmail-send` 4桁) mohe=`expr "$mofu" : \(^\s[0-9]*\)'` 5桁) mohe=`expr "$mofu" : \([0-9]*\)'` kill $mohe /etc/rc.d/init.d/qmail シェルスクリプトで自動化したいので、PIDの桁数に関係なく確実に killしたいです。 上手い方法があったら御教授下さい。 よろしくお願いします。

  • tomcat自動起動がうまくいかない。

    FC3でApache2+tomcat4+mod_jk2で環境を構築しています。 Apache単体、tomcat単体、連繋とも全てうまくいきtomcatの自動起動設定を/etc/rc.d/init.d/tomcat というファイルで作製し、起動テストをおこなったのですが、実行時にエラーがでます。 作製したファイルの内容は以下のとおりです。 ここから #!/bin/sh # # Startup script for the tomcat # # chkconfig: 345 80 15 # description: Tomcat is a Servlet+JSP Engine. # Source function library. . /etc/rc.d/init.d/functions case "$1" in 'start') if [ -f /usr/local/tomcat/bin/startup.sh ]; then echo "Starting the tomcat service " su - nobody -c "export JAVA_HOME=/usr/java/j2sdk1.4.2_07;\export TOMCAT_HOME=/usr/local/tomcat;/usr/local/tomcat/bin/startup.sh" fi ;; 'stop') echo "Stopping the tomcat service." su - nobody -c "export JAVA_HOME=/usr/java/j2sdk1.4.2_07;\export TOMCAT_HOME=/usr/local/tomcat;/usr/local/tomcat/bin/shutdown.sh" ;; 'restart') $0 stop $0 start ;; *) echo "Usage: $0 {start|stop|restart}" ;; esac exit 0 ここまで rootでの/usr/local/tomcat/bin/startup.shを利用した起動は問題無く起動します。 JAVA_HOMEとCATALINA_HOMEは設定済みです。 どこが問題でしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • シェルスクリプトでユーザ一括登録

    現在、新サーバを構築し ユーザ150人を一括登録するために 作業ミスをなくすためシェルスクリプトでやりたいのですが 現在の簡単なものだと コメントやパスワード設定をすることができません どなたかご教授くださいませ! 現在のシェル #!/bin/sh for FILE in `cat $1` do useradd -m -s /bin/csh -d /home/$FILE $FILE done また 負荷を軽減するため、どこかでスリープを入れた ほうがよろしいのでしょうか?

  • Apache・tomcat同時再起動シェルスクリプト作成

    見よう見まねで初めて下記のシェルスクリプトを作成しました。 権限をrootに変更する文を追加したいのですが 良く解りません。ご教授よろしくお願い致します。 作成目的は、アプリプログラム反映時、一回のコマンド発行で起動を 行いたく作成しました。(面倒なので) #!/bin/bash # ############################################### # ## アプリサーバ二重化用手動再起動コマンド ### # ############################################### # ############## 環境設定 ####################### export PATH="/usr/local/apache2/bin" export CATALINA_HOME="/usr/local/tomcat" export JAVA_HOME="/usr/local/jdk1.5.0_10" export PATH="/usr/local/jdk1.5.0_10/bin" export TOMCAT_HOME="/usr/local/tomcat" # ############## 変数代入 ####################### # CMD1=`ps -ef | grep java | grep -v grep | wc -l` CMD2=`ps -ef | grep httpd | grep -v grep | wc -l` # ############## 停止コマンド発行 ############### # /usr/local/apache2/bin/apachectl stop if [ "$CMD2" -ge "1" ] ;then killall httpd /usr/local/tomcat/bin/shutdown.sh elif [ "$CMD2" = "0" ] ;then /usr/local/tomcat/bin/shutdown.sh fi # ############## 開始コマンド発行 ############### if [ "$CMD1" -ge "1" ] ;then killall java /usr/local/tomcat/bin/startup.sh elif [ "$CMD1" = "0" ] ;then /usr/local/tomcat/bin/startup.sh fi if [ "$CMD1" -ge "1" ] ;then /usr/local/apache2/bin/apachectl start elif [ "$CMD1" = "0" ] ;then /usr/local/tomcat/bin/startup.sh     /usr/local/apache2/bin/apachectl start fi

  • 対話形式処理のスクリプト化

    例えば次のような処理をスクリプトやマクロで行いたいのですが可能でしょうか? (シェル言語はbash,zshなどを想定しておりますが他の言語を想定したご回答でも参考になります) ちなみに対話途中で表示される出力結果はあってもなくても構いませんが 出力結果を表示させないようなやり方から理解したいと考えております。 # mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 to server version: 4.1.12 Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> select user,host,password from ysql.user; +------+----------------------+----------+ | user | host | password | +------+----------------------+----------+ | root | localhost | | | root | centos.centossrv.com | | | | localhost | | | | centos.centossrv.com | | +------+----------------------+----------+ 4 rows in set (0.00 sec) mysql> set password for root@localhost=password('rootパスワード'); Query OK, 0 rows affected (0.00 sec) mysql> set password for root@'centos.centossrv.com'=password('rootパスワード'); Query OK, 0 rows affected (0.00 sec) mysql> select user,host,password from mysql.user; +------+----------------------+------------------+ | user | host | password | +------+----------------------+------------------+ | root | localhost | **************** | | root | centos.centossrv.com | **************** | | | localhost | | | | centos.centossrv.com | | +------+----------------------+------------------+ 4 rows in set (0.00 sec) mysql> exit Bye

  • rcスクリプトの作成について

    デーモンとして /home1/bea81/weblogic81/server/bin/startNodeManager.sh のファイルをOS起動時にサービスとして起動させたいと思っています。 そこでまず /etc/init.d/nodemanager として以下のスクリプトファイルを作成し、 実行権限を与えました。 確認として以下を実行しましたが、、 # nodemanager start nodemanager: not found # # echo $PATH /usr/sbin:/usr/bin # # /etc/init.d/nodemanager /etc/init.d/nodemanager: not found # と絶対パスで記述してもNotFoundとなってしました。 何が原因なんでしょうか? また現状/etc/init.d/にパスが通っていない状況なんですが、OS起動時に既に パスを通っている状態にするにはどのようにしたら良いのでしょうか? また/usr/bin/などは既にパスが通っている状況なんですが、このようなファイルを /usr/bin/などの中に入れてしまうという事でも問題ないのでしょうか? ------------------------------------------------------------------------ /etc/init.d/nodemanager ------------------------------------------------------------------------ #!/bin/sh # # /etc/init.d/nodemanager.sh # case "$1" in start) if [ -f /home1/bea81/weblogic81/server/bin/startNodeManager.sh ] ; then /bin/su - weblogic -c 'cd /home1/bea81/weblogic81/server/bin;./startNodeManager.sh &' fi ;; *) echo "Usage: /etc/rc2.d/S99nodemanager{ start | stop }" exit 1 ;; esac exit 0 ------------------------------------------------------------------------ 宜しくお願い致します。