Selenium RC Server を Linux でデーモン化する

Java Service Wrapper で RC Server をデーモン化

最近、以下の記事に習って Hudson をデーモン化したのですが、Selenium RC Server でも同様にしたところ、うまくできたようなので手順として記録。

Java Service Wrapper を利用して、常に RC Server が起動している状態にします。インフラチームに監視対象に入れてもらえたりもするはず。

Java Service Wrapper のダウンロード

Java Service Wrapper の Community Edition で、自分の環境にあったものをダウンロード。
今回、自分は社内での環境に合わせて x86 の 64bit 版を。
http://wrapper.tanukisoftware.com/doc/english/download.jsp

selenium ユーザの追加 と Java Service Wrapper の展開

root ユーザで

$ useradd selenium -d /home/selenium
$ wget http://wrapper.tanukisoftware.com/download/3.5.6/wrapper-linux-x86-64-3.5.6.tar.gz
$ tar xzvf wrapper-linux-x86-64-3.5.6.tar.gz
$ mv wrapper-linum-x86-64-3.5.6/* /home/selenium/.
$ chown -R selenium:users /home/selenium/*
$ su - selenium
$ mkdir /home/selenium/tmp
Selenium RC Server の jar を配置

http://seleniumhq.org/download
から Selenium RC Server 1.0.3 の jar ファイルをダウンロードし、/home/selenium/lib/ の下に置く

wrapper.conf を設定
$ cp /home/selenium/src/conf/wrapper.conf.in /home/selenium/conf/wrapper.conf

/home/selenium/conf/wrapper.conf を設定、以下のような記述があるあたりを編集(それ以外の箇所について以下では省略)

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp // 2010/12/10 追記

wrapper.java.classpath.1=../lib/selenium-server.jar
wrapper.java.classpath.2=../lib/wrapper.jar

wrapper.java.additional.1=-Djava.io.tmpdir=../tmp

wrapper.app.parameter.1=../lib/selenium-server.jar
wrapper.app.parameter.2=-port
wrapper.app.parameter.3=4444
wrapper.app.parameter.4=-firefoxProfileTemplate // <-- この2行は省略可。特定の Firefox Profile を使いたい場合は
wrapper.app.parameter.5=/root/.mozilla/firefox/abcdefg.Selenium // <-- ここでその Profile が保存されているパスを指定

wrapper.console.title=Selenium RC Server

wrapper.ping.timeout=300
wrapper.jvm_exit.timeout=60
デーモン化

root ユーザで

$ cp /home/selenium/src/bin/sh.script.in /etc/init.d/selenium
$ chmod 755 /etc/init.d/selenium

/etc/init.d/selenium を設定

# Application
APP_NAME="Selenium"
APP_LONG_NAME="Selenium RC Server"

# Wrapper
WRAPPER_CMD="/home/selenium/bin/wrapper"
WRAPPER_CONF="/home/selenium/conf/wrapper.conf"

RUN_AS_USER=root
環境変数 DISPLAY の設定

root ユーザで /root/.bashrc に 以下を追記

export DISPLAY=:1
起動
$ /etc/init.d/selenium start

これで、ポート 4444 で Selenium RC Server が起動するはず。

補足1

上記は、Firefox が /root/firefox にインストールされていて、 root ユーザで RC Server を起動する前提になってます。
もし selenium ユーザで起動するなら、下記の点が追加・修正必要と思われます。

  • firefoxselenium ユーザがアクセス可能なディレクトリにインストール
  • その firefoxselenium 用のプロファイルを作成、そのディレクトリを確認 (ex: /home/selenium/.mozilla/firefox/xxxxxxx.Selenium)
  • wrapper.conf の firefoxProfileTemplate の値に上のプロファイルディレクトリを指定
  • /etc/init.d/selenium 中の RUN_AS_USER を selenium に設定
  • selenium の .bashrc に export DISPLAY=:1 を設定
補足2

上記は、 Selenium RC Server 1.0.3 で試しましたが、簡単に試したところ、 2.0 alpha 7 でも動きそうです。

  1. selenium-server-1.0.3.jar のかわりに、selenium-server-standalone-2.0a7 を /home/selenium/lib/ 以下に置く
  2. wrapper.conf で指定する jar をそちらに変更する

これだけで起動、動作しました。

ちなみに関係ないですが、 1.0.3 は open コマンドなどを通じて GET リクエストを投げるとき、 HEAD リクエストもセットで飛ばしてしまう不具合(?)があるようなのですが、2.0a7 ではそういうことはなさそうです。

追記: 2010/12/10

wrapper.conf で変更しなければならない点が1点抜けていたので追記しました。
デフォルトで

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

となっているところを

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp

とする必要があります。