【问题标题】:Scala start Play server in productionScala 在生产环境中启动 Play 服务器
【发布时间】:2012-05-30 13:29:27
【问题描述】:

我在 EC2 上部署了一个 Play 2.0 应用程序,我使用 play start 启动该应用程序,它在后台运行,我可以点击 Ctrl-D 并且该进程将继续在后台运行,但它会在一个而(15 或 20 分钟?),不知道为什么。我通常在启动应用程序后退出 ssh 会话,我希望这不是原因。

【问题讨论】:

  • 是的,它可能由于您结束ssh 会话的挂断信号而关闭。尝试启动 Unix 程序 screen(一个多路复用器),然后像往常一样启动您的 Play 服务器。然后,在退出ssh 之前,按ctrl + a,然后按d 以“分离”screen 会话。这将使 Play 在后台运行(通过 screen),即使在您的 ssh 会话结束后也是如此。
  • 您是否尝试过否认该过程?见stackoverflow.com/a/625436/51280
  • @Destin,是的,这是由于我的ssh 会话结束和nohup 工作。

标签: scala playframework playframework-2.0


【解决方案1】:

nohup play start 为我工作。

【讨论】:

【解决方案2】:

我正在为我的 Play 应用程序使用以下启动脚本(在 CentOS 上),似乎工作正常,它把它放在后台以及它自己的进程组和会话中,因此它不受挂断等的影响。关于 @ 的提示987654322@ 和 target/start 来自 Guillaume Bort,是“正确的做法”。

#!/bin/bash
#
# chkconfig: 2345 98 1
# description: MyApp application
#

case "$1" in
start)
  su - apps <<'EOF'
cd /opt/myapp || exit 1
PATH=/opt/play-2.1.1:$PATH
echo "Starting MyApp..."
play stage 
setsid target/start < /dev/null > /dev/null 2>&1 & 
EOF
  ;;
stop)
  su - apps <<'EOF'
cd /opt/myapp || exit 1
PATH=/opt/play-2.1.1:$PATH
echo "Stopping MyApp..."
play stop
EOF
  ;;
esac

您可以通过以下方式验证它是否已隔离:

ps -e -o user,pid,ppid,pgrp,sid,command | grep -i play

你会看到类似的东西:

apps      2949     1  2949  2949 java -cp target/staged/* play.core.server.NettyServer target/..

意思是init(pid 1)是它的父进程,它被隔离在自己的进程组(2949)中。

【讨论】:

    【解决方案3】:

    我建议您使用 activator(以前的 play)脚本使用的 stage 命令来准备项目部署二进制文件。您可以在后台运行该二进制文件,它可以在下面代码中第二个命令显示的路径中找到。

    ./activator stage
    target/universal/stage/bin/project-name &
    

    【讨论】:

    • 你可能也应该否认这个过程。
    【解决方案4】:

    对于 play 2.2.3 ... play "start -Dhttp.port=8080" 对我有用!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 2019-11-10
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多