2012-03-19 56 views
9

我有玩應用,可以很容易地在Debian部署, 什麼是如何在Debian上部署Play 2.0應用程序?

  1. 方式這裏怎麼出來的代碼創建一個後臺程序,與標準的init.d腳本,主要問題優雅地停止應用程序?

  2. 如何將代碼作爲胖jar編譯,與多個文件和目錄(部署Play應用程序的標準方式)相比,易於維護1個單個文件。

回答

9
  1. 假設你正在使用的「玩DIST」包,你可以創建一個圍繞它一個簡單的init.d腳本。喜歡的東西:

/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.他們並不真正擁有項目的單個文件分發。最好的辦法是運行「play dist」來生成可分發的軟件包。即使它是作爲單個文件分發的,爲了提高效率(僅僅處理war文件),它可能會在運行時被提取到文件系統。

+0

FatJar的在運行時不會被擴展。我正在尋找一個選項來建立一個fatJar。 – sheki 2012-03-25 19:15:11

+1

這個腳本在大多數情況下都能正常工作,但在'kill'失敗的奇怪時間。那麼可能會處於不良狀態。 PID,文件不見了,應用程序仍在運行。 – sheki 2012-03-25 19:16:40

0

我編寫腳本的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