服务器退出时,Play 框架应用停止工作

Play framework app stops working when server exited

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

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

我需要我的应用程序启动并 运行 从我 运行 开始持续 运行 宁(直到我决定停止它),我希望它在 运行后台(守护进程)。

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

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

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

我通常将 pid 文件发送到 /dev/null,这样我就不会在播放重新开始时出现锁定问题。请注意,由于这将 运行 一个后台进程,您应该配置一个文件记录器以查看服务器输出。

playframework 支持 JavaServerAppPlugin from sbt-native-packager, which provides systemloaders 管理您的应用程序生命周期。但是,您需要构建一个 debian 文件才能使用此功能。

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

配置

@nnmat 是对的,你应该添加 -Dpidfile.path=/dev/null。您可以在 build.sbt ( see the documentation )

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

还要确保你configure the correct systemloader。 debian 软件包默认为 Upstart。您可能想使用 Systemd。 如果您使用 sbt-native-packager 1.2.x 请查看最新文档。

干杯, 向