【问题标题】:Running SBT as Daemon将 SBT 作为守护进程运行
【发布时间】:2011-08-25 09:57:34
【问题描述】:

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

我似乎找不到办法做到这一点。运行“sbt run &”似乎会在后台挂起应用程序。

有人知道怎么做吗?

【问题讨论】:

    标签: scala sbt


    【解决方案1】:

    您还可以使用sbt-assemblysbt-onejar 将您的应用程序打包成一个“胖” jar。

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

    【讨论】:

    • 我想我希望这将被内置到 SBT 中,以便我可以跳过打包步骤,但我会研究这些。
    【解决方案2】:

    我们一直在 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
    

    这很有效 - 我们没有遇到任何问题。不过,非网络应用可能会有所不同。

    【讨论】:

    • 谢谢。将此更改为正确答案。这消除了打包步骤,让我能够更快地部署。
    • 它确实启动但立即退出。就我而言,我使用的是 sbt container:start。有什么想法吗?
    • 这里也一样。它开始但随后立即退出。有什么想法吗?
    • @JhonnyEverson @JacobusR sbt container:start shell 通过在容器之后启动命令行 shell 来解决这个问题。但是这样做的正确方法是什么? (我想不要直接使用sbt。)
    • @wodow 这真的很有用。你想在这里回答我的问题:stackoverflow.com/questions/32544032/…
    【解决方案3】:

    您可以使用GNU Screen 将其保留在后台。无论如何,我想不出这样做的充分理由。打包应用程序并在后台运行生成的二进制文件不是更好吗?

    【讨论】:

    • 一个很好的理由是拥有一台远程开发机器,设计人员可以在其中上传 html 文件而不必重新启动服务。我不知道如何在打包的应用程序中做到这一点。
    • 我没想到。不错。
    【解决方案4】:

    只需输入 sbt runProd 然后按 Ctrl+D 该进程将作为守护进程运行。

    【讨论】:

      猜你喜欢
      • 2017-03-31
      • 2023-03-02
      • 2012-12-03
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      相关资源
      最近更新 更多