【问题标题】:Play 2.0 - starting as Windows service after server restartPlay 2.0 - 服务器重启后作为 Windows 服务启动
【发布时间】:2013-02-26 12:07:23
【问题描述】:

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

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

有什么办法可以解决吗?

【问题讨论】:

    标签: windows-services playframework-2.0


    【解决方案1】:

    YAJSW

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

    RUNNING_PID

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

    实际上,如果您无法避免创建它,您可以...在应用程序启动后立即将其删除,最好使用Globals object's 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();
        }
    }
    

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

    【讨论】:

      【解决方案2】:

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

      窗户:

      -Dpidfile.path=NUL
      

      Unix:

      -Dpidfile.path=/dev/null
      

      发现于https://groups.google.com/forum/#!topic/play-framework/4amD9o37Ki4

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 2011-04-21
          • 1970-01-01
          • 2020-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-31
          • 1970-01-01
          相关资源
          最近更新 更多