1

我一直在尝试为我的 play2 应用程序编写启动脚本,但我无法让它作为后台任务工作。我从文档开始,想出了下面的脚本。

脚本:

#! /bin/sh

# description: Starts autocomplete play app using daemon
# 1. Go to $APPLICATION_PATH and prepare for dev by doing: play clean compile stage
#    This will create a start script at target/start
# 2. Start the application by running this script

. /etc/rc.d/init.d/functions

PLAY_HOME=/opt/play
PLAY=$PLAY_HOME/play
NAME=autocomplete
DESC="autocomplete application"
PID_FILE=/var/run/autocomplete/$NAME.pid    

# Path to the JVM
JAVA_HOME=/usr/java/latest
export JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin

APPLICATION_PATH=/opt/playapps/autocomplete

DAEMON_OPTS="-Dconfig.file=/opt/playapps/autocomplete/conf/application-dev.conf"

start()
{
    echo -n "Starting $DESC with: --pidfile $PID_FILE ${APPLICATION_PATH}/target/start $DAEMON_OPTS"
    daemon --pidfile $PID_FILE "${APPLICATION_PATH}/target/start $DAEMON_OPTS"
}
stop()
{
  echo -n $"Stopping $DESC:"
  #NOT DONE YET
}


case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
esac

exit $RETVAL

我用谷歌搜索了这个问题并找到了这样的解决方案,他们使用的是 我的Red Hat Enterprise Linux Server 5.6 (Tikanga) dist上没有的start-stop-daemon 。如果可能的话,我宁愿不安装任何其他软件来完成这项工作。为了使这项工作作为后台任务并将其与控制台分离,我错过了什么?CTRL+D 不起作用,CTRL+C 退出进程。

4

3 回答 3

1

好的,这是在 favouretti 提示之后的一种解决方案:

#! /bin/sh

# description: Starts autocomplete play app using daemon
# 1. Go to $APPLICATION_PATH and prepare for dev by doing: play clean compile stage
#    This will create a start script at target/start
# 2. Start the application by running this script
# created by: Jakob

. /etc/rc.d/init.d/functions

PLAY_HOME=/opt/play
PLAY=$PLAY_HOME/play
NAME=autocomplete
DESC="autocomplete application"

# Path to the JVM
JAVA_HOME=/usr/java/latest
export JAVA_HOME
export PATH=$PATH:$JAVA_HOME/bin

APPLICATION_PATH=/opt/playapps/autocomplete

DAEMON_OPTS="-Dconfig.file=/opt/playapps/autocomplete/conf/application-dev.conf"

start()
{
        echo -n "Starting $DESC with: $APPLICATION_PATH/target/start $DAEMON_OPTS &"
        $APPLICATION_PATH/target/start $DAEMON_OPTS &
}
stop()
{
        echo -n $"Stopping $DESC:"
        kill `cat $APPLICATION_PATH/RUNNING_PID`
}


case "$1" in
  start)
    start
    ;;
  stop)
        stop
        ;;
esac

exit $RETVAL

您将需要 CTRL+D 才能退出控制台,这与我的想法并不完全一致。也许有人有更好的解决方案?

于 2013-01-02T12:56:54.067 回答
0

这是我在 Amazon AMI Linux 下自动启动 play 2.2 应用程序的版本。在 CentOS 和 RedHat 下也是如此。其他 linux 风格可能需要很少的适应。该脚本在单独的用户下启动播放应用程序。

#!/bin/bash
# description: MyWorkCalendar Play App
# processname: myworkcalendar
# chkconfig: 234 20 80

# User running the Play process
USER=mywork
USER_HOME=/home/mywork

# Java home, add java and play to path
export JAVA_HOME=$USER_HOME/java_home
export PATH=$JAVA_HOME/bin:$USER_HOME/play_home:$PATH

# Path to the application
APP_PATH=$USER_HOME/app/work-calendar/target/universal/stage
APP_OPTS="-Dconfig.file=$APP_PATH/conf/application-prod.conf"

RETVAL=0

case "$1" in
  start)
    echo -n "Starting Play service"
    rm -f ${APP_PATH}/RUNNING_PID
    su $USER -c "$APP_PATH/bin/myworkcalendar $APP_OPTS >/dev/null" &
    RETVAL=$?
    ;;
  stop)
    echo -n "Shutting down Play service"
    kill `cat $APP_PATH/RUNNING_PID`
    RETVAL=$?
    ;;
esac
exit $RETVAL

将脚本放到 /etc/init.d 中,使其可执行并使用 chkconfig 进行注册:

sudo chmod 755 script-name
sudo chkconfig --add script-name
sudo chkconfig script-name on
于 2014-01-12T14:41:36.843 回答
-1

这是我的 Play 2.2 启动/停止脚本版本:

http://vladsprogrammingblog.blogspot.com/2014/01/play-startstop-script.html

于 2014-02-18T18:57:16.973 回答