Play 2.0 - 服务器重启后作为Windows服务启动

6

我已经将Play!应用程序作为Windows服务运行。它是根据此指南实现的。

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

有没有任何选项可以解决这个问题?

3个回答

7

YAJSW

关于 YAJSW,我发现这个答案更易理解。当然,它与您提供的链接非常相似,但请记住,通常建议使用dist命令而不是stage,因为它得到了更好的开发者关注(在dist中修复了更多的错误)。Mikhail的答案更清晰(给他投票!)

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();
    }
}

请注意:在apllication.conf中更改pidfile.path将无法解决问题,因为play将使用该路径检查实例是否正在运行。

6

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接