将SBT作为守护进程运行

dev*_*ley 12 scala sbt

我有一个使用"sbt run"运行良好的SBT scala应用程序.但是,这会锁定控制台,我宁愿将其作为服务/守护程序启动,以便我可以使用控制台,以便我可以将其添加到init.d以确保我的应用程序在启动时自动启动.

我似乎找不到办法做到这一点.运行"sbt run&"似乎将应用程序挂起在后台.

有人知道怎么做这个吗?

小智 9

你也可以使用sbt-assemblysbt-onejar将你的应用程序装入一个"胖"的jar中.

这将使它成为一个可执行的jar并且可以轻松运行java -jar jarname.jar.


Joh*_*loo 8

我们一直在init.d中使用SBT启动测试/演示应用程序:

#!/bin/sh
# test lift web app

case "$1" in
'start')
    cd /home/demouser/wa/HTML5DemoLift231/HTML5demo/
    sbt jetty run
    ;;
'stop')
    cd /home/demouser/wa/HTML5DemoLift231/HTML5demo/
    sbt jetty stop
    ;;
*)
    echo "Usage: $0 { start | stop }"
    ;;
esac
exit 0
Run Code Online (Sandbox Code Playgroud)

这只是有效 - 我们没有遇到任何问题.但是,对于非Web应用程序可能会有所不同.

  • 它确实开始但立即退出.在我的情况下,我正在使用sbt容器:启动.有任何想法吗? (5认同)
  • @JhonnyEverson @JacobusR`sbt container:start shell`通过在容器后面启动命令行shell来解决这个问题.但是这样做的正确方法是什么?(我想,不要直接使用`sbt`.) (2认同)

Raf*_*tro 6

您可以使用GNU Screen将其保留在后台.无论如何,我不能认为这是一个很好的理由.打包应用程序并在后台运行生成的二进制文件不是更好吗?

  • 一个很好的理由是拥有一台远程开发机器,设计人员可以只上传html文件,而不必重新启动服务.我不知道如何在打包的应用程序中这样做. (3认同)