Java 如何在Debian上部署Play 2.0应用程序?

Java 如何在Debian上部署Play 2.0应用程序?,java,scala,playframework-2.0,debian,playframework-2.2,Java,Scala,Playframework 2.0,Debian,Playframework 2.2,我有一个play应用程序,可以方便地在Debian上部署, 有什么方法可以解决这个问题 使用标准的init.d脚本从代码中创建守护程序,这里的主要问题是如何优雅地停止应用程序 如何将代码编译为一个胖jar,与多个文件和目录相比,它更易于维护一个文件(部署Play应用程序的标准方式) 假设您使用的是“playdist”包,您可以围绕它创建一个简单的init.d脚本。比如: /etc/init.d/play.myplayapp #! /bin/sh ### BEGIN INIT I

我有一个play应用程序,可以方便地在Debian上部署, 有什么方法可以解决这个问题

  • 使用标准的init.d脚本从代码中创建守护程序,这里的主要问题是如何优雅地停止应用程序

  • 如何将代码编译为一个胖jar,与多个文件和目录相比,它更易于维护一个文件(部署Play应用程序的标准方式)

  • 假设您使用的是“playdist”包,您可以围绕它创建一个简单的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
    

    二,。他们实际上没有项目的单一文件分发。您所能做的最好的事情就是运行“playdist”来生成一个可分发的包。即使它是作为单个文件分发的,也可能在运行时被提取到文件系统中以提高效率(即war文件的处理方式)。

    我准备了与play 2.2.x兼容的脚本新版本:


    FatJar不会在运行时展开。我正在寻找一个构建fatJar的选项。这个脚本在大多数情况下都可以运行,但在异常情况下,
    kill
    会失败。那时候可能情况不好。PID文件已消失,应用程序仍在运行。
     #! /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