【发布时间】:2011-08-25 09:57:34
【问题描述】:
我有一个使用“sbt run”运行良好的 SBT scala 应用程序。但是,这会锁定控制台,我宁愿将其作为服务/守护程序启动,以便我可以使用控制台,也可以将其添加到 init.d 以确保我的应用程序在启动时自动启动.
我似乎找不到办法做到这一点。运行“sbt run &”似乎会在后台挂起应用程序。
有人知道怎么做吗?
【问题讨论】:
我有一个使用“sbt run”运行良好的 SBT scala 应用程序。但是,这会锁定控制台,我宁愿将其作为服务/守护程序启动,以便我可以使用控制台,也可以将其添加到 init.d 以确保我的应用程序在启动时自动启动.
我似乎找不到办法做到这一点。运行“sbt run &”似乎会在后台挂起应用程序。
有人知道怎么做吗?
【问题讨论】:
您还可以使用sbt-assembly 或sbt-onejar 将您的应用程序打包成一个“胖” jar。
这将使它成为一个可执行的 jar 并且可以通过java -jar jarname.jar 轻松运行。
【讨论】:
我们一直在 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 shell 通过在容器之后启动命令行 shell 来解决这个问题。但是这样做的正确方法是什么? (我想不要直接使用sbt。)
您可以使用GNU Screen 将其保留在后台。无论如何,我想不出这样做的充分理由。打包应用程序并在后台运行生成的二进制文件不是更好吗?
【讨论】:
只需输入 sbt runProd 然后按 Ctrl+D 该进程将作为守护进程运行。
【讨论】: