2011-05-14 157 views
11

我有一個使用「sbt run」運行良好的SBT scala應用程序。但是,這會鎖定控制檯,我寧願將它作爲服務/守護進程啓動,以便我可以使用控制檯,並且還可以將其添加到init.d以確保我的應用程序在啓動時自動啓動。將SBT作爲守護進程運行

我似乎無法找到一種方法來做到這一點。運行「sbt run &」似乎在後臺掛起應用程序。

有誰知道如何做到這一點?

回答

8

我們推出測試/演示應用與SBT在init.d中所有的時間:

#!/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 

這只是工作 - 我們曾與它沒有任何問題。不過,這可能與非網絡應用程序有所不同。

+0

謝謝。將其更改爲正確的答案。這消除了包裝步驟,並允許我更快部署。 – devinfoley 2011-05-17 14:59:20

+5

它確實開始但立即退出。在我的情況下,我使用sbt容器:開始。有任何想法嗎? – 2012-02-08 15:38:27

+1

同樣在這裏。它開始,但立即退出。有任何想法嗎? – Jack 2012-03-08 14:52:51

5

您可以使用GNU Screen將其保留在後臺。無論如何,我不能認爲這是一個很好的理由。將應用程序打包並在後臺運行生成的二進制文件不是更好嗎?

+2

一個很好的理由是有一個遠程開發機器,設計人員只需上傳html文件而不必重新啓動服務。我不知道如何在打包的應用程序中做到這一點。 – 2012-02-08 15:24:42

+0

我沒有想過這件事。尼斯。 – 2012-02-14 10:39:55

9

您也可以使用sbt-assemblysbt-onejar將您的應用程序打包成「胖」罐子。

這將使它成爲一個可執行的jar,並且可以通過java -jar jarname.jar輕鬆運行。

+0

我想我希望這將被內置到SBT中,這樣我就可以跳過包裝步驟,但我會研究這些。 – devinfoley 2011-05-16 04:03:25

+1

大會工作像我的魅力,謝謝 – Jack 2012-03-09 10:15:06

1

只需鍵入sbt runProd 然後按Ctrl + D 該進程將作爲守護程序進程運行。