【问题标题】:Play framework app stops working when server exited服务器退出时播放框架应用程序停止工作
【发布时间】:2017-06-11 07:16:42
【问题描述】:

我有一个 Play 框架 Web 应用程序,当按照以下步骤部署到我的 ubuntu (14.04) 服务器时,它可以工作:

  • 在 sbt 中运行 'dist'
  • 将生成的 .zip 文件传输到服务器
  • ssh'd 进入服务器并使用“/bin/”运行应用程序 -Dplay.crypto.secret=abcxyz"

这可以很好地在前台运行应用程序,但是当我失去互联网连接时会立即终止它(断开与服务器的 ssh 连接)。

我需要我的应用程序从我运行它的那一刻起持续启动并运行(直到我决定停止它),并且我希望它在后台运行(守护程序)。

当我通过终端退出服务器时,将应用程序作为服务器上的守护程序服务运行会阻止应用程序停止吗?如果是这样,我该怎么做?有没有一种简单的方法可以确保应用程序运行而不管我是否退出正在运行的服务器/失去与它的连接?

【问题讨论】:

    标签: playframework server sbt ubuntu-14.04 sbt-native-packager


    【解决方案1】:

    有很多方法可以做到这一点。这是nohup的快速方法:

    nohup ./bin/$NAME -Dplay.crypto.secret=abcxyz -Dpidfile.path=/dev/null > /dev/null 2>&1 &
    

    我通常将 pid 文件发送到/dev/null,所以当游戏重新启动时我没有锁定问题。请注意,由于这将运行后台进程,因此您应该配置文件记录器以查看服务器输出。

    【讨论】:

      【解决方案2】:

      playframework 启用了来自 sbt-native-packager 的 JavaServerAppPlugin,它提供了 systemloaders 来管理您的应用程序生命周期。但是,您需要构建一个 debian 文件才能使用此功能。

      1. 使用sbt debian:packageBin 构建您的应用程序
      2. 将生成的 debian 文件复制到您的服务器
      3. 使用sudo dpkg -i your-app.deb 安装

      配置

      @nnmat 是对的,您应该添加-Dpidfile.path=/dev/null。你可以在你的build.sbtsee the documentation)中做到这一点

      javaOptions in Universal ++= Seq("-Dpidfile.path=/dev/null")
      

      还要确保您configure the correct systemloader。默认情况下,对于 debian 软件包,它是 Upstart。您可能想使用Systemd。 如果你使用 sbt-native-packager 1.2.x 看看最新的文档。

      干杯, 渚

      【讨论】:

      • 谢谢@Muki :) 我现在正在使用 nmat 的解决方案来启动和运行,不过我以后一定会考虑实施这个解决方案!
      • 使用 debian 文件实际上应该更容易。您不必在每次部署时手动终止正在运行的实例。这就是系统加载器的好处;)为您节省大量手动工作。
      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多