6

我有游戏!作为 Windows 服务运行的应用程序。它是根据指南实施的。

问题是RUNNING_PID服务器重启时应用程序的根文件夹没有被删除,应用程序无法再次启动。我必须删除此文件并手动重新启动服务。

有什么办法可以解决吗?

4

3 回答 3

7

YAJSW

如果YAJSW我发现这个答案有更好的理解。它当然与您提供的链接非常相​​似,无论如何请记住,更经常建议使用dist命令而不是stage因为它得到了开发人员的更多关注(更多错误已修复dist)。米哈伊尔的回答更清楚(投票给他!)

RUNNING_PID

在这种情况下RUNNING_PID,有一些拉取请求建议添加禁用 pidfile 的选项......无论如何,正如我所看到的,它们都没有被接受......

实际上,如果您无法避免创建它,您可以...在应用程序启动后立即删除它,最好使用Globals 对象的 onStart()方法。要随时了解工作实例的当前 PID,只需将文件重命名为某个名称,Play 在启动时不会对其进行检查 - 例如RUNNING_PID_INFO. 在这种情况下,服务器重启后服务将毫无问题地运行您的应用程序。

import play.GlobalSettings;
import java.io.File;

public class Global extends GlobalSettings {
    @Override
    public void onStart(Application application) {
        File pidFile = new File("RUNNING_PID");
        pidFile.renameTo(new File("RUNNING_PID_INFO"));
    }

    @Override
    public void onStop(Application application) {
        File pidFile = new File("RUNNING_PID_INFO");
        pidFile.delete();
    }
}

(注意:更改pidfile.pathappllication.conf 不会解决问题,因为 play 会使用它来检查实例是否正常工作)

于 2013-02-27T05:49:50.813 回答
6

pidfile.path从 Play Framework 2.1 开始,您可以通过设置属性来禁用 PID 文件:

视窗:

-Dpidfile.path=NUL

Unix:

-Dpidfile.path=/dev/null

https://groups.google.com/forum/#!topic/play-framework/4amD9o37Ki4找到

于 2013-06-30T14:07:32.760 回答
1

我最近按照这个答案安装了一个使用 YAJSW 的播放框架应用程序。我注意到现在,RUNNING_PID 会自动删除,您不必担心修改代码来删除文件。另外,如果您的服务依赖于其他服务,最好将 DELAYED_AUTO_START 设置为启动模式,以确保服务器重启后服务正常启动。

于 2014-09-29T18:49:24.473 回答