Python で書いた CGI を Tomcat の上で実行できるようにする。

ボクは普段アプリケーションの実行環境として Tomcat を使っています。
運用で使うちょっとしたCGIなんかも Python で書いて Tomcat の上で動かしちゃっています。

以下は、TomcatPython で書いた CGI を実行できるようにするためのメモです。


Tomcat には最初から CGI 実行環境が備わっているので、ちょっとした設定だけで実行できるようになります。

CGI を実行させるための設定は、Tomcat 上で動くすべてのアプリケーションに反映させたい場合と、特定のアプリケーションにだけ設定したい場合があると思います。
どちらも設定の方法は同じで、編集するファイルが異なるだけです。

  • 全てのアプリケーションに反映させる場合
    • $CATALINA_HOME/conf/web.xml
  • 個別のアプリケーションに反映させる場合
    • $CATALINA_HOME/webapps/アプリケーション名/WEB-INF/web.xml

レッツチャレンジ

1. web.xml を編集する

以下を追記します。( $CATALINA_HOME/conf/web.xml の場合は既に設定が書いてあってコメントになってるだけなのでコメントを外すだけでもいいです )

  ◆ファイルの上の方にの設定がいくつかあるのでその辺に
  
    cgi
    
        org.apache.catalina.servlets.CGIServlet
    
    
      clientInputTimeout
      100
    
    
      debug
      6
    
    
      cgiPathPrefix
      WEB-INF/cgi
    
    5
  

  ◆ファイルの下の方に  の設定がいくつかあるのでその辺に
  
    cgi
    /cgi-bin/*
  

2. servlets-cgi.jar を使えるようにする

リネームするだけ

% cd $CATALINA_HOME/server/lib
% mv servlets-cgi.renametojar servlets-cgi.jar

3. Tomcat 再起動

あとは再起動するだけ。

% cd $CATALINA_HOME/bin
% shutdown.sh
% startup.sh

4. 動作確認

Python で簡単なCGIを書いて動作確認をします。


通常 Python スクリプトの1行目は下のように書くことが多いですが

#!/usr/bin/env python

これだと実行時の環境によって起動される Python が変わってくるので
自分で Python をインストールしている場合には明示的にそちらを使うように
絶対パスで指定しちゃった方が確実です。

後、拡張子はpyでなくcgiにしといた方が、他のサーバに持って行ったりすることを考えると安全です。

% cd $CATALINA_HOME/webapps/アプリケーション名/WEB-INF/
% mkdir cgi
% cd cgi
% vi hello.cgi

#!/usr/local/bin/python  <- ここ重要!
# coding=utf-8
print 'Content-Type: text/html\n'
print 'Hello Word'

ブラウザからアクセスしてみる."cgi-bin"になってるところに注意。

http://localhost/アプリケーション名/cgi-bin/hello.cgi

ではでは