我正在尝试编写一个基本的 Scala 应用程序,它可以使用 commons-daemon 作为守护程序运行。以下代码基于本文中的 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 编译主类的方式是否导致代码与守护进程接口不兼容?
谢谢!