サーバーで動作を行うデーモンを、Scalaで書きます。
なお、環境はRHEL系のLinuxで動作を確認しました。それ以外のOSの方は
適宜読み替えてください。
また、ビルドなどはsbtを利用するので、「始めるsbt」などを読んでおくと
いいと思います。
1.Scalaのコードを書く
1.1 参照の追加
sbtを使ってアプリを構成します。今回、ApacheCommonDaemonを利用するので、
build.sbtに次のように参照を追加します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
libraryDependencies += "commons-daemon" % "commons-daemon" % "1.0.10" |
1.2 Scalaのコードを書く
Daemonインターフェースを継承したクラスを書きます。
今回は次のようにしました。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package jp.numa08.main | |
import org.apache.commons.daemon._ | |
class MyDaemon extends Daemon { | |
var daemonService:MyDaemonService = _ | |
@throws(classOf[DaemonInitException]) | |
@throws(classOf[Exception]) | |
def init(context:DaemonContext){ | |
daemonService = new MyDaemonService() | |
} | |
@throws(classOf[Exception]) | |
def start(){ | |
daemonService.start() | |
} | |
@throws(classOf[Exception]) | |
def stop(){ | |
daemonService.stop() | |
} | |
def destroy(){ | |
} | |
} |
一応、例外を明示的に投げるように書いておいています。
1.3 実行可能ファイルを作る
sbt-assembkyを使って実行可能なjarファイルを用意しました。
sbt-assemblyについては、こちらの記事を参照してもらえると嬉しいです。
2. jsvcのセットアップ
2.1 ソースコードをダウンロードする
http://commons.apache.org/daemon/download_daemon.cgi上記のURLから''native-src''をダウンロードします。
ビルド対象のコードは
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
jsvc/commons-daemon-1.0.12-native-src/unix |
2.2 ビルドに必要なライブラリ、ツール群をインストールする。
ApacheCommonDaemonのページによると次のツールが必要とのことです。
- GNU AutoConf (at least version 2.53)
- An ANSI-C compliant compiler (GCC is good)
- GNU Make
- A Java Platform 2 compliant SDK
yumなどを利用してインストールしましょう。
2.3 ビルド、インストールする
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
./configure | |
make | |
make install |
jsvc -help ができることを確認。
3. 起動する
起動スクリプトと終了のスクリプトを記述しました。
デーモンらしく,/etc/rc..d/init.d/以下に保存をすると
いいと思います。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MY_JARFILE=/usr/local/bin/my_daemon.jar | |
MY_PID_FILE=/usr/local/etc/my_daemon.pid | |
MAIN_CLASS=jp.numa08.main.MyDaemon | |
prog=my_daemon | |
RETVAL=0 | |
start() { | |
echo -n $"Starting ${prog}:" | |
jsvc -home ${JAVA_HOME} -cp ${CLASSPATH}:${MY_JARFILE} -pidfile ${MY_PID_FILE} ${MAIN_CLASS} | |
RETVAL=$? | |
if [[ $RETVAL == 0 ]]; then | |
echo -e "\t\t [\033[1;32m OK \033[0m]" | |
else | |
echo -e "\t\t [\033[1;31m FAILED \033[0m]" | |
fi | |
return $RETVAL | |
} | |
stop() { | |
echo -n $"Stopping ${prog}" | |
jsvc -stop -pidfile ${CHOCOLA_PID} ${MAIN_CLASS} | |
RETVAL=$? | |
if [[ $RETVAL == 0 ]]; then | |
echo -e "\t\t [\033[1;32m OK \033[0m]" | |
else | |
echo -e "\t\t [\033[1;31m FAILED \033[0m]" | |
fi | |
return $RETVAL | |
} | |
case "$1" in | |
start) | |
start | |
;; | |
stop) | |
stop | |
;; | |
restart) | |
start | |
stop | |
;; | |
*) | |
echo $"Usage: ${prog} {start|top}" | |
RETVAL=2 | |
esac | |
exit $RETVAL |
4. 参考にしたWEBページなど
以下のページを参考にしました。Play framework 2.0でデーモン化する方法
始めるSBT
SBTで実行可能なjarファイルを作る
Apche Commons Daemon