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