読者です 読者をやめる 読者になる 読者になる

LinuxにTomcatインストール

Linux Java

よりTomcat5らしいTomcatセットアップ

このエントリは2006/11/06の再掲です

Tomcat5はcommons-daemonのおかげでよりOSレベルのサービスと親和性が高くなりました。

が、あまりにstartup.shを使う起動方法が広く知られているために、せっかくTomcat5がUnixデーモンとして動く方法があっても、活かされないケースが多いのではないでしょうか。デーモンプロセスであることとjavaコマンドとしての実行がどれほど違うのかを語ることはできません(よく理解していないもので)が、すくなくとも、以下のメリットを享受できます。

  • プロセスのユーザを変更できる
  • javaコマンドにパスが通っているかどうかに影響されない

まず、エンドユーザ向けのサービスをroot権限で動作させるのは、セキュリティ上好ましくありませんね。また、環境の変更ができるだけ既存のサービスに影響しないようにするほうが望ましいです。往々にして、ひとつのOSに複数のJavaランタイム(しかもベンダーが異なる)がインストールされることがありますし。

Tomcat5のリファレンスには、Tomcat4にはなかった、Unix daemonという章があります。ここには、GCCJDKがあれば、Tomcat5をデーモンとして起動するコマンドを作成する方法が載せられているので、参考にしましょう。以下、要点と落とし穴をかいつまんでおきます。

コマンドのソースはTomcatインストールディレクトリのbin/jsvc.tar.gzに収められています。このソースを展開し、

    autoconf
    ./configure --with-java=/usr/java/jdk1.5.0_06
    make

とすれば、jsvcというコマンドが作成されるので、これをTomcatインストールディレクトリのbin直下に配置します。

jsvcをリブート時に自動起動するには、jsvc.tar.gzを展開したディレクトリ中の、

  • native/Tomcat5.sh
  • native/Tomcat.sh

を参考にして、etc/init.dのスクリプトを書く必要があります。このとき、デーモンの実行ユーザをrootではない者に設定するのがポイントです。FedraCore4で動作した修正スクリプトをここに置いておきます。(オリジナルはjava.library.pathを指定していましたが、何の目的かわからなかったので、削除しました。何か必要なのかもしれません)

このスクリプトは、init.dにコピーせずとも、./Tomcat5.sh startなどとして、その場で実行できるので、うまく動作するように修正してからinit.dに移すとよいでしょう。

この方法でうまく動かない場合、もっとも可能性が高いのは、ファイルのアクセス権限です。インストールしたユーザと実行するユーザが異なり、もっとも基本的なファイルが読み書きできなくて動作不良を起こすことがあります。以下に、個人的にchownとchmodが必要だったと記憶している項目を挙げておきます。

  • conf以下のファイルを実行ユーザが読めるか
  • logs以下のファイルに実行ユーザが書けるか
  • works/Catalina以下に、持ち主が実行ユーザ以外のファイルがないか
  • 個々のアプリケーションが書き込むディレクトリに実行ユーザが書けるか

ちなみに、commons-daemonの成果は、時代的にTomcat5でリリースされてただけで、同じ方法でTomcat4でもデーモン化することができるハズです。