2

commons-daemon を使用してデーモンとして実行できる基本的な Scala アプリケーションを作成しようとしています。次のコードは、この投稿の Java プログラムに基づいています。

package daemon

import org.apache.commons.daemon._ 
import java.util.{ Timer, TimerTask, Date }

class EchoTask extends TimerTask{
  def run() { println(new Date() + " running ...") }
}

object DaemonApp extends App with Daemon {
  val timer = new Timer();
  timer.schedule(new EchoTask(), 0, 1000); 

  def init(daemonContext: DaemonContext) {} 
  def start(){} 
  def stop(){} 
  def destroy(){}
}

これは、sbt から実行したり、jar をビルドしたりするときに問題なく動作します。ただし、jsvc からコードを実行することはできません。たとえば、次を実行した場合:

$ ./jsvc -cp $DAEMON_HOME/daemon.jar -pidfile $DAEMON_HOME/pidfile -errfile '&2' -outfile '&1' daemon.DaemonApp 

私はstderrで次を取得します

java.lang.NoSuchMethodException: daemon.DaemonApp.init([Ljava.lang.String;)
    at java.lang.Class.getMethod(Class.java:1670)
    at org.apache.commons.daemon.support.DaemonLoader.load(DaemonLoader.java:176)
Cannot load daemon
Service exit with a return value of 3

探しているメソッドであるinit(Array [String])で何が起こっているのかわかりません。scalac がメイン クラスをコンパイルする方法に、コードとデーモン インターフェイスとの互換性をなくしている何かがありますか?

ありがとう!

4

2 に答える 2