我有玩應用,可以很容易地在Debian部署, 什麼是如何在Debian上部署Play 2.0應用程序?
方式這裏怎麼出來的代碼創建一個後臺程序,與標準的init.d腳本,主要問題優雅地停止應用程序?
如何將代碼作爲胖jar編譯,與多個文件和目錄(部署Play應用程序的標準方式)相比,易於維護1個單個文件。
我有玩應用,可以很容易地在Debian部署, 什麼是如何在Debian上部署Play 2.0應用程序?
方式這裏怎麼出來的代碼創建一個後臺程序,與標準的init.d腳本,主要問題優雅地停止應用程序?
如何將代碼作爲胖jar編譯,與多個文件和目錄(部署Play應用程序的標準方式)相比,易於維護1個單個文件。
/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文件),它可能會在運行時被提取到文件系統。
我編寫腳本的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
FatJar的在運行時不會被擴展。我正在尋找一個選項來建立一個fatJar。 – sheki 2012-03-25 19:15:11
這個腳本在大多數情況下都能正常工作,但在'kill'失敗的奇怪時間。那麼可能會處於不良狀態。 PID,文件不見了,應用程序仍在運行。 – sheki 2012-03-25 19:16:40