我有玩!应用程序作为Windows服务运行。它是根据this指南实施的。
问题是,当重新启动服务器并且应用程序无法再次启动时,不会删除应用程序根文件夹中的RUNNING_PID
。我必须删除此文件并再次手动启动该服务。
有没有解决方案?
答案 0 :(得分:7)
如果YAJSW
我发现this answer有更好的理解。它当然与你给出的链接非常相似,但请记住,更经常建议使用dist
命令而不是stage
,因为它有更好的开发人员注意力({{1}中修复了更多错误})。米哈伊尔的答案更清楚了(投票给他!)
在dist
的情况下,有一些拉动请求建议添加一个禁用pidfile的选项...无论如何,正如我所看到的,它们都没有被接受......
实际上,如果您无法避免创建它,您可以...在应用程序启动后立即将其删除,最好使用Globals object's RUNNING_PID
方法。要了解工作实例的当前PID是什么,只需将文件重命名为某些内容,在启动时不会被Play检查 - 例如onStart()
。在这种情况下,服务器的重启服务将运行您的应用程序没有问题。
RUNNING_PID_INFO
(注意:在apllication.conf中更改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();
}
}
将无法解决问题,因为播放将使用它来检查实例是否正常工作)。
答案 1 :(得分:6)
从Play Framework 2.1开始,您可以通过设置pidfile.path
属性来禁用PID文件:
视窗:
-Dpidfile.path=NUL
Unix的:
-Dpidfile.path=/dev/null
找到https://groups.google.com/forum/#!topic/play-framework/4amD9o37Ki4
答案 2 :(得分:1)
我最近使用YAJSW按照this answer安装了一个播放框架应用程序。我注意到,现在,RUNNING_PID会自动删除,您不必担心修改代码以删除文件。此外,如果您的服务依赖于其他服务,最好将DELAYED_AUTO_START设置为启动模式,以确保在服务器重新启动后正确启动服务。