我在Linux下工作。我有3个文件(每个大约2Gb含有人类基因组序列)。我有java代码来通过PHP开发的web界面来处理这些文件。处理时间约为24小时甚至更长。php java批处理
如何从PHP运行Java代码以便在关闭浏览器时处理不会终止。
由于处理时间太长,因此在浏览器处于打开状态直到过程完成之前不可行。
我假定它需要批处理。
我在Linux下工作。我有3个文件(每个大约2Gb含有人类基因组序列)。我有java代码来通过PHP开发的web界面来处理这些文件。处理时间约为24小时甚至更长。php java批处理
如何从PHP运行Java代码以便在关闭浏览器时处理不会终止。
由于处理时间太长,因此在浏览器处于打开状态直到过程完成之前不可行。
我假定它需要批处理。
据我了解你的问题你想从PHP调用你的java代码?正确?所以这里是解决方案
<?php
//use system call to execute java class or jar
system('java yourclass', $retval);
?>
使用上面的php脚本。执行你的java代码。
获取进程inforamtion看到follwoing
我可以建议如果你有权访问源代码,你实际上可以使用Java RMI并从RMI内启动所有的处理。这样你可以从等式中移除PHP。
然后,如果您在开始之前确实需要PHP来设置某些变量或设置,则可以在使用Java RMI开始处理之前将它们写入文件。
如果您需要关于如何获得RMI工作,你可以参考教程:
http://download.oracle.com/javase/tutorial/rmi/index.html
干杯!
这是我提出的解决方案:
1)创建一个数据库表或配置文件在哪里存储一个标志,“add_process_to_queue”为例。
2)从你的PHP面板,你可以设置这个标志设置,用于检查此标志的cron作业1
3),如果它被设置为1,作业重置为0,并开始Java程序
基于您的评论,在接受的答案用于php execute a background process的方法应该做的很好。只需启动进程,获取进程ID并将其与启动进程的用户一起存储在数据库中(或使用可用于标识启动进程的用户的文件名)。使用提供的isRunning
方法(仅为所提供的进程ID提供ps
),您可以检查进程是否仍在运行。
在Unix/Linux中,如果要启动在后台运行的进程,则必须在命令末尾添加&字符。
> java blabla &
因此,呼叫shell_execute()这样的:
shell_execute('java blabla &')
因此,将你的脚本结束之后继续处理。
如何使用shell_exec()获得执行命令的pid – World 2011-05-17 09:12:49
你的问题到底是什么?你不知道如何开始后台进程?你期待在PHP前端开始的过程中发生什么(因为你不想保持浏览器打开)? – wimvds 2011-05-17 07:18:12
[php执行后台进程]的可能重复(http://stackoverflow.com/questions/45953/php-execute-a-background-process) – wimvds 2011-05-17 07:19:59
我需要在后台运行进程,但进程启动从网页(让按下提交按钮后说)。然后,我需要跟踪每个用户的运行流程,这些用户应该可以从用户页面看到不同的用户。 – World 2011-05-17 07:25:07