0

マシンの起動時に systemd を使用してシステム上で自動的に実行および再起動する Akka アプリケーションを実行したいと考えています。apache daemon/jscv でこれをやろうとしてきましたが、いくつかの問題が発生しています。今、私はちょうどそれを実行しようとしています (ステップ 1) が、それはすでに失敗しています。私は次のコード

object Launcher extends Daemon {

  val system = ActorSystem("testsystem")
  var schedule: Cancellable = new Cancellable{
    def cancel(): Unit = ()
    def isCancelled: Boolean = true
  }

  def roll(rand: Random) = () => {
    rand.nextInt(6)
  }

  val selection = system.actorSelection("mytestactor")


  def init(context: DaemonContext) = {
    val ref = system.actorOf(Props[TestActor], "mytestactor")
  }

  def start = {
    import scala.concurrent.ExecutionContext.Implicits.global
    val jrand = new Random()
    val roller = roll(jrand)
    schedule = system.scheduler.schedule(Duration(0, SECONDS), Duration(2, SECONDS))( () => selection ! roller() )
  }



  def stop = {
    if (!schedule.isCancelled) {
      schedule.cancel()
    }
  }

  def destroy = {
    system.shutdown()
  }

}

class TestActor extends Actor {

  def receive = {
    case 0 => println("rolled zero")
    case n: Int if n < 6 => println("rolling")
  }
}

私はそれをパッケージ化しようとしsbt assembly、それからそれを起動しようとしました

それを起動しようとすると

sudo jsvc -outfile ~/out.txt -errfile ~/err.txt -cp commons-daemon.jar:akkadaemon.jar Launcher

しかし、機能していないようです。err.txt含む

java.lang.ClassNotFoundException: Launcher
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at org.apache.commons.daemon.support.DaemonLoader.load(DaemonLoader.java:151)
Cannot load daemon
Service exit with a return value of 3

このアプローチを機能させるにはどうすればよいですか? これは少なくとも実行可能な方向ですか (これが機能するようになったら systemd スクリプトを書きたい場合)、それともすべて間違っているのでしょうか?

4

1 に答える 1