2012-03-19 17 views
9

Tengo aplicación de juego, para que sea fácil de implementar en Debian, ¿Cuáles son las formas de¿Cómo implementar una aplicación Play 2.0 en Debian?

  1. Crear un demonio fuera del código, con un guión init.d estándar, el problema principal aquí cómo para detener con gracia la aplicación?

  2. ¿Cómo puedo compilar el código como un frasco gordo, fácil de mantener 1 solo archivo en comparación con múltiples archivos y directorios (la forma estándar de implementación de una aplicación Play).

Respuesta

9
  1. suponiendo que está utilizando el paquete de "jugar dist", se puede crear un simple script de init.d alrededor de ella. Algo así como:

/etc/init.d/play.myplayapp

#! /bin/sh 

    ### BEGIN INIT INFO 
    # Provides:   play 
    # Required-Start: $all 
    # Required-Stop:  $all 
    # Default-Start:  2 3 4 5 
    # Default-Stop:  0 1 6 
    # Short-Description: 
    # Description: 
    ### END INIT INFO 

    APP="myplayapp" 
    APP_PATH="/opt/play/$APP" 

    start() { 
     $APP_PATH/start & 
    } 

    stop() { 
     kill `cat $APP_PATH/RUNNING_PID` 
    } 

    case "$1" in 
     start) 
     echo "Starting $APP" 
     start 
     echo "$APP started." 
     ;; 
     stop) 
     echo "Stopping $APP" 
     stop 
     echo "$APP stopped." 
     ;; 
     restart) 
     echo "Restarting $APP." 
     stop 
     sleep 2 
     start 
     echo "$APP restarted." 
     ;; 
     *) 
     N=/etc/init.d/play.$APP 
     echo "Usage: $N {start|stop|restart}" >&2 
     exit 1 
     ;; 
    esac 

    exit 0 

2. En realidad, no tienen una única distribución de archivos de proyectos. Lo mejor que puedes hacer es ejecutar "play dist" para generar un paquete distribuible. Incluso si se distribuyera en un solo archivo, probablemente se extraería al sistema de archivos en tiempo de ejecución solo por eficiencia (cómo se manejan los archivos war).

+0

de FatJar no se expanden en tiempo de ejecución. Estaba buscando una opción para construir un fatJar. – sheki

+1

Esta secuencia de comandos funcionaría la mayoría de las veces, pero por el extraño momento en que 'kill' fallaría. Podría estar en mal estado entonces. El archivo PID desapareció y la aplicación aún se está ejecutando. – sheki

0

me preparó una nueva versión de la secuencia de comandos compatible con paquetes de juego 2.2.x:

https://github.com/mgosk/play-app-deamon

#! /bin/sh 

    ### BEGIN INIT INFO 
    # Provides:   play 
    # Required-Start: $all 
    # Required-Stop:  $all 
    # Default-Start:  2 3 4 5 
    # Default-Stop:  0 1 6 
    # Short-Description: 
    # Description: 
    ### END INIT INFO 

    # configurable variables 
    APP_NAME="myplayapp" 
    APP_DIR="/opt/myplayapp" 
    CONF="application.conf" 

    # private variables 
    APP_SCRIPT="$APP_DIR/bin/$APP_NAME" 
    PID_FILE="/var/run/$APP_NAME.pid" 
    CONF_FILE="$APP_DIR/conf/$CONF" 

    start() { 
     $APP_SCRIPT -Dpidfile.path=$PID_FILE -Dconfig.file=$CONF_FILE > /dev/null & 
    } 

    stop() { 
     kill `cat $PID_FILE` 
    } 

    case "$1" in 
     start) 
     echo "Starting $APP_NAME" 
     if [ -e "$PID_FILE" ] ; then 
       echo "$APP_NAME already running" 
       echo "Try restart option or delete pid file at $PID_FILE" 
     else 
       start 
       echo "$APP_NAME started" 
     fi 
     ;; 
     stop) 
     echo "Stopping $APP_NAME" 
     stop 
     echo "$APP_NAME stopped." 
     ;; 
     restart) 
     echo "Restarting $APP_NAME" 
     stop 
     sleep 2 
     start 
     echo "$APP_NAME restarted." 
     ;; 
     status) 
     if [ -e "$PID_FILE" ] ; then 
       echo "$APP_NAME is running (pid `cat $PID_FILE`)" 
     else 
       echo "$APP_NAME is not running" 
     fi 
     ;; 
     *) 
     N="/etc/init.d/$APP_NAME" 
     echo "Usage: $N {start|stop|restart|status}" >&2 
     exit 1 
     ;; 
    esac 

    exit 0 
Cuestiones relacionadas