2014-05-16
■[Scala]commons-daemon 1.0.15でPlay 2.2アプリをデーモン化する ![commons-daemon 1.0.15でPlay 2.2アプリをデーモン化するを含むブックマーク commons-daemon 1.0.15でPlay 2.2アプリをデーモン化するを含むブックマーク](http://megalodon.jp/get_contents/164444736)
以下で紹介されている方法ですが、Play 2.2およびcommons-daemonの最新版である1.0.15だと少し変わっていたのでメモ。
"commons-daemon" % "commons-daemon" % "1.0.15"
Daemonインターフェイスを実装したApplicationクラスを用意します。NettyServerのインターフェースが少し変わっています。
package daemon import org.apache.commons.daemon.Daemon import org.apache.commons.daemon.DaemonContext import play.core.server.NettyServer import play.core.StaticApplication import java.io.File class Application extends Daemon { var nettyServer: NettyServer = _ var applicationPath: File = _ override def init(dc: DaemonContext) { applicationPath = new File(dc.getArguments()(0)) } override def start() = { nettyServer = new NettyServer( appProvider = new StaticApplication(applicationPath), port = Some(Option(System.getProperty("http.port")).map(Integer.parseInt).getOrElse(9000)), address = Option(System.getProperty("http.address")).getOrElse("0.0.0.0")) } override def stop() = { if (nettyServer != null) nettyServer.stop() } override def destroy() = { nettyServer = null } }
あとは冒頭の記事と同じくjsvcをコンパイルして起動スクリプトを用意します。commons-daemon 1.0.11から-cwdというオプションで実行ディレクトリを指定するようになっています(省略した場合、ルートディレクトリが実行ディレクトリになります)。
#/bin/sh CLASSPATH=.:./lib/* PID_FILE=./pidfile BACKUP_DIR=`pwd` cd `dirname $0` CUR_DIR=`pwd` start() { ./jsvc \ -home $JAVA_HOME \ -cp $CLASSPATH \ -cwd ./ \ -pidfile $PID_FILE \ -Dlogback.configurationFile=./logback.xml \ -debug -verbose \ -outfile stdout.log \ -errfile '&1' \ daemon.Application $CUR_DIR } stop() { ./jsvc \ -stop \ -pidfile $PID_FILE \ daemon.Application } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage $0 start/stop" exit 1;; esac cd $BACKUP_DIR
とりあえずこんな感じで。
コメントを書く
トラックバック - http://d.hatena.ne.jp/takezoe/20140516