- ベストアンサー
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は設定済みです。どこが問題でしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
それでしたら、「エラー」ではないように思います。 お使いのスクリプトも正常かと。。 (ただ、スクリプト中のTOMCAT_HOMEは、CATALINA_HOME かもしれませんし、TOMCATのディレクトリへのnobodyの アクセス権を与える必要はあります。) 先のrootで起動うんぬんはお忘れください。 そもそも、show_miz様がお使いの起動・終了スクリプトを /etc/rc.d/init.d/ に書く意味(目的)は、 /etc/rc.d/init.d/tomcat start と直接手動で実行させるためではありません。 それならば、Tomcatを起動するユーザ(もちろんアクセス権がないといけませんが、)で、/usr/local/tomcat/bin/startup.sh とすればよいです。 /etc/rc.d/init.d/ に起動スクリプトを書くのは、 OS起動時に「自動的」にTomcatを立ち上げたりする目的で書かれるものです。 OS起動時に、誰もログインしていなくても デーモンは動きます。 rootはユーザ(人)ですが、デーモンはrootよりも 強いです。なにしろ魔物です。 su で、ユーザにスイッチするときに パスワードを聞いてくる?というようなことは ありません。 デーモンが、nobadyに、tomcatを立ち上げさせる ということですので、結果的には tomcatはnobodyにより起動される状態になります。 もうすでに行われているかもしれませんが、rootユーザで、 # chmod +x /etc/rc.d/init.d/tomcat でスクリプトに実行権を与え、 # --chkconfig --add tomcat として、chkconfigに登録して、 # chkconfig --list | grep tomcat で、登録されたのを確認してみてください。 ランレベル3や5がonになっていれば、 起動したときに、Tomcatも立ち上がると思います。 LinuxOSを再起動して、 (再起動しても問題なければの話ですが。。。) Tomcatを手動で立ち上げていないのに、 自動的に立ち上がっていれば成功です。 間違っているかもしれませんが、私の知る限りでは そんなところです。
その他の回答 (2)
- copymaster
- ベストアンサー率81% (83/102)
ちょっと調べてみましたら、 nobodyにsuするときには、使用するシェルを指定する 必要があるようです。 方法については、参考URLをご覧ください。
お礼
参照URLを確認したところ、現在nobodyでの起動は上手くいかないようです。 参照URLも最後そのように終わっていました。 HTTPDを介しての利用であればroot起動でも問題ないようですので、#2の方法で当面試してみます。 いろいろとありがとうございました。
- copymaster
- ベストアンサー率81% (83/102)
ユーザが nobady で弱すぎるからでしょうか。 私のほうでは、たとえばstartのところは、 su - -c "/usr/local/tomcat/bin/startup.sh" として、Tomcat4.1.30が、ちゃんと動いてます。 stop のほうも、同じように shutdown.sh を たたいてます。
補足
アドバイスありがとうございます。 私の設定では、ユーザーで /etc/rc.d/init.d/tomcat start とすると画面に su pass: と表示されます。 ここでルートのパスワードを入力してもパスワードが違うと怒られます。 そこでsuでルートになってから実行しようとすると今度はこのアカウントには実行権限がないと怒られます。 copymasterさんのやり方だと、おそらく起動はルート権限で行うのですよね。 ルート権限での起動を辞めたいのですが何か手は無いでしょうか。
補足
説明不足でした。 おっしゃるとおり、起動時に自動起動をさせることが目的です。 最初に指摘いただいたとおりスクリプトの中からnobodyの記述を削除した場合、起動時に問題なく有効になっています。 ところが、nobodyを付け加えた状態ですと、起動時有効になりません。 tomcatのフォルダについては以下のフォルダをnobodyに変更しています。 ・webapps ・work ・logs ・conf rootでの起動であれば問題ないのですがセキュリティ上あまりよくはないと聞いたので、root以外での起動を目的としています。 よろしくお願いします。