我已经将Play!应用程序作为Windows服务运行。它是根据此指南实现的。
问题是当服务器重新启动时,应用程序根目录下的RUNNING_PID
文件没有被删除,导致应用程序无法再次启动。我必须手动删除该文件并重新启动服务。
有没有任何选项可以解决这个问题?
我已经将Play!应用程序作为Windows服务运行。它是根据此指南实现的。
问题是当服务器重新启动时,应用程序根目录下的RUNNING_PID
文件没有被删除,导致应用程序无法再次启动。我必须手动删除该文件并重新启动服务。
有没有任何选项可以解决这个问题?
关于 YAJSW
,我发现这个答案更易理解。当然,它与您提供的链接非常相似,但请记住,通常建议使用dist
命令而不是stage
,因为它得到了更好的开发者关注(在dist
中修复了更多的错误)。Mikhail的答案更清晰(给他投票!)
关于 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
将无法解决问题,因为play将使用该路径检查实例是否正在运行。pidfile.path
属性来禁用PID文件。Windows:
-Dpidfile.path=NUL
Unix:
-Dpidfile.path=/dev/null
发现于https://groups.google.com/forum/#!topic/play-framework/4amD9o37Ki4
该链接是关于 Play 框架的讨论。