プロが教える店舗&オフィスのセキュリティ対策術

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は設定済みです。

どこが問題でしょうか。
よろしくお願いします。

A 回答 (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を手動で立ち上げていないのに、
自動的に立ち上がっていれば成功です。

間違っているかもしれませんが、私の知る限りでは
そんなところです。

この回答への補足

説明不足でした。
おっしゃるとおり、起動時に自動起動をさせることが目的です。

最初に指摘いただいたとおりスクリプトの中からnobodyの記述を削除した場合、起動時に問題なく有効になっています。

ところが、nobodyを付け加えた状態ですと、起動時有効になりません。

tomcatのフォルダについては以下のフォルダをnobodyに変更しています。
・webapps
・work
・logs
・conf

rootでの起動であれば問題ないのですがセキュリティ上あまりよくはないと聞いたので、root以外での起動を目的としています。

よろしくお願いします。

補足日時:2005/03/28 09:50
    • good
    • 0

ちょっと調べてみましたら、


nobodyにsuするときには、使用するシェルを指定する
必要があるようです。

方法については、参考URLをご覧ください。

参考URL:http://www.jajakarta.org/kvasir/bbs/technical/17 …
    • good
    • 0
この回答へのお礼

参照URLを確認したところ、現在nobodyでの起動は上手くいかないようです。
参照URLも最後そのように終わっていました。

HTTPDを介しての利用であればroot起動でも問題ないようですので、#2の方法で当面試してみます。

いろいろとありがとうございました。

お礼日時:2005/03/29 14:34

ユーザが 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さんのやり方だと、おそらく起動はルート権限で行うのですよね。

ルート権限での起動を辞めたいのですが何か手は無いでしょうか。

補足日時:2005/03/26 09:01
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!