【发布时间】:2013-02-26 12:07:23
【问题描述】:
我有戏!作为 Windows 服务运行的应用程序。它是根据this 指导实施的。
问题是服务器重启时应用根目录下的RUNNING_PID没有被删除,应用无法再次启动。我必须删除此文件并手动重新启动服务。
有什么办法可以解决吗?
【问题讨论】:
标签: windows-services playframework-2.0
我有戏!作为 Windows 服务运行的应用程序。它是根据this 指导实施的。
问题是服务器重启时应用根目录下的RUNNING_PID没有被删除,应用无法再次启动。我必须删除此文件并手动重新启动服务。
有什么办法可以解决吗?
【问题讨论】:
标签: windows-services playframework-2.0
在YAJSW 的情况下,我发现this answer 更好理解。它当然与您提供的链接非常相似,无论如何请记住,更经常建议使用dist 命令而不是stage,因为它得到了开发人员的更多关注(dist 中修复了更多错误)。米哈伊尔的答案更清楚(投票给他!)
在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 会使用它来检查实例是否正常工作)。
【讨论】:
从 Play Framework 2.1 开始,您可以通过设置 pidfile.path 属性来禁用 PID 文件:
窗户:
-Dpidfile.path=NUL
Unix:
-Dpidfile.path=/dev/null
发现于https://groups.google.com/forum/#!topic/play-framework/4amD9o37Ki4
【讨论】:
我最近通过关注this answer 安装了一个使用 YAJSW 的播放框架应用程序。我注意到现在,RUNNING_PID 会自动删除,您不必担心修改代码来删除文件。另外,如果您的服务依赖于其他服务,最好将 DELAYED_AUTO_START 设置为启动模式,以确保服务器重启后服务正常启动。
【讨论】: