2011-05-14 26 views
11

Tengo una aplicación SBT scala que funciona bien con "sbt run". Sin embargo, esto bloquea la consola, y prefiero iniciarlo como un servicio/daemon para que pueda usar la consola, y también para poder agregarlo a init.d para asegurarme de que mi aplicación se inicie automáticamente al inicio. .Ejecutando SBT como Daemon

Parece que no puedo encontrar la forma de hacerlo. Al ejecutar "sbt run &" parece colgar la aplicación en segundo plano.

¿Alguien sabe cómo hacer esto?

Respuesta

8

Nos lanzar aplicaciones de prueba/demo con SBT en init.d todo el tiempo:

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

Esto sólo funciona - no hemos tenido ningún problema con ella. Sin embargo, puede ser diferente con una aplicación que no sea web.

+0

Gracias. Cambiando esto a la respuesta correcta. Esto elimina el paso del paquete y me permite implementarlo más rápido. – devinfoley

+5

Comienza pero se cierra de inmediato. En mi caso estoy usando sbt container: start. ¿Algunas ideas? –

+1

Lo mismo aquí. Comienza pero luego se cierra de inmediato. ¿Algunas ideas? – Jack

5

Puede usar GNU Screen para mantenerlo en segundo plano. De todos modos, no puedo pensar una buena razón para hacer eso. ¿No sería mejor empacar la aplicación y ejecutar los binarios generados en segundo plano?

+2

Una buena razón sería tener una máquina de desarrollo remoto, donde los diseñadores solo pueden cargar archivos html y no tienen que reiniciar el servicio. No sé cómo hacer eso en una aplicación empaquetada. –

+0

No pensé en eso. Bonito. –

9

También puede colocar su aplicación en una jarra "gruesa" usando sbt-assembly o sbt-onejar.

Esto lo convertirá en un archivo ejecutable y fácilmente ejecutable a través de java -jar jarname.jar.

+0

Supongo que esperaba que esto se incluyera en SBT para poder omitir el paso del paquete, pero lo investigaré. – devinfoley

+1

assembly-sbt funcionó como un encanto para mí, gracias – Jack

1

Simplemente escriba sbt runProd Y a continuación, presione Ctrl + D El proceso se ejecutará como un proceso de daemon.