我有一个perl脚本(Cgi / Apache / Windows),它在计算机上执行一些程序,并为networking输出格式。 脚本需要大约4-5分钟才能完全运行。
我的问题是,当脚本正在运行时某人取消页面加载(或closuresWeb浏览器)时,服务器中的perl进程将保持运行而不会执行任何操作,并且保留所有打开文件的locking,以便另一个脚本无法运行。 这个过程永远不会结束,我必须使用“结束进程树”来结束perl.exe和启动的subprocess才能够重新运行脚本。
我怎样才能确保脚本不会像这样死亡? (如果脚本继续在后台运行,并在完成时“退出”,这是最好的解决scheme)
如何增加数字海洋液滴中的并发请求?
使用代理而不是使用htaccess rewriteRuleredirect
用apache更新windows上的PHP版本
当Apache Web服务器使用mod_jk连接Tomcat时启用SSL
Zend框架:Multidb无法初始化
问题安装OpenNLP
需要在.htaccess重写规则中转义#(哈希/磅)字符
首先,没有CGI脚本应该运行4 – 5分钟。
其次,请参阅使用CGI观察长时间运行的进程 。
我会说你的设计模式是次优的。 一个CGI脚本不应该做任何重处理。 它应该访问一个数据库,构建一个页面,并返回结果。 一个CGI脚本应该运行几分之一秒。 Apache并没有考虑到这个用例。
如果你想踢很长的处理工作,那么这个工作应该运行在你的web应用程序堆栈之外。 你的CGI脚本可以开始工作,检查它的进展,杀死等,但不会等待它。 用户刷新或ajax轮询可以检查正在运行的作业的状态。
您可以通过访问STDOUT来检测您是否按下了停止按钮。 如果用户不再等待您的答案,以下代码将死在Apache / IIS CGI上:
eval { print STDOUT "foobar" or die "Gone"; }; if ($@) { &cleanup; } &do_something;
你可能想打印更智能的东西…
请注意,您的4-5分钟脚本将Apache子进程保留到自身,直到它完成运行。 考虑在后台运行脚本并使用AJAX轮询结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。