Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php java批处理_Java_Php_Batch Processing - Fatal编程技术网

php java批处理

php java批处理,java,php,batch-processing,Java,Php,Batch Processing,我在Linux中工作。我有3个文件(每个大约2Gb包含人类基因组序列)。我有java代码通过PHP开发的web界面处理这些文件。处理时间约为24小时甚至更长 如何从PHP运行Java代码,以便在关闭浏览器时处理不会终止 由于处理时间太长,在处理完成之前保持浏览器打开是不可行的 我假设它需要批处理。我可以建议,如果您可以访问源代码,您实际上可以使用Java RMI,并从RMI中启动所有处理。这样就可以从等式中删除PHP 同样,如果在开始之前确实需要PHP设置一些变量或设置,那么可以在使用JavaR

我在Linux中工作。我有3个文件(每个大约2Gb包含人类基因组序列)。我有java代码通过PHP开发的web界面处理这些文件。处理时间约为24小时甚至更长

如何从PHP运行Java代码,以便在关闭浏览器时处理不会终止

由于处理时间太长,在处理完成之前保持浏览器打开是不可行的


我假设它需要批处理。

我可以建议,如果您可以访问源代码,您实际上可以使用Java RMI,并从RMI中启动所有处理。这样就可以从等式中删除PHP

同样,如果在开始之前确实需要PHP设置一些变量或设置,那么可以在使用JavaRMI开始处理之前将它们写入文件

如果您需要关于如何使RMI工作的教程,请参考:


干杯

这是我建议的解决方案:

1) 创建一个db表或一个配置文件,在其中存储一个标志,例如“将\u进程\u添加到\u队列”

2) 在PHP面板中,可以将此标志设置为1


3) 设置一个检查此标志的cron作业,如果设置为1,该作业将重置为0并启动Java程序

据我所知,您想从PHP调用Java代码吗?对的这就是解决方案

<?php
    //use system call to execute java class or jar
    system('java yourclass', $retval);
?>

使用上面的php脚本。执行java代码

要获取流程信息,请参阅以下内容


根据您的评论,在被接受的答案中使用的方法应该很好。只需启动流程,获取流程id并将其与启动流程的用户一起存储在数据库中(或者使用可用于标识启动流程的用户的文件名)。使用提供的
isRunning
方法(仅对提供的进程id执行
ps
)可以检查进程是否仍在运行。

在Unix/Linux中,如果要启动在后台运行的进程,必须在命令末尾添加&character

> java blabla &
因此,像这样调用shell_execute():

shell_execute('java blabla &')

因此,它将在脚本结束后继续处理。

您的问题到底是什么?你不知道如何启动后台进程?一旦进程启动(因为您不想让浏览器保持打开状态),PHP前端会发生什么情况?可能会重复我需要在后台运行该进程,但该进程是从网页启动的(比如在按下提交按钮后)。然后,我需要跟踪每个用户的运行进程,这些进程应该可以从用户页面看到给不同的用户。我的意思是如何获取此事件的进程id。@Bishwo,您将无法获取进程id,但是您可以在java文件中创建一些日志,这将使您了解java代码。此外,还可以查看@Savas Alp答案。@Ummar可以从java代码中获取进程id。我想知道在PHP中是否也可以这样做。据我所知,PHP不提供为已执行命令提供进程id的功能。如果我能在PHP代码中获得进程id,我的工作将非常容易。@Ummar你的回答帮助了我,但还有一个问题。proc_get_status()仅在proc_open()中的命令完全执行后提供进程id。所以它限制了我在后台运行进程。系统('javayourclass',$retval);在后台运行,这很好,但我没有从中获取进程id。您如何看待Zend平台中的Zend队列。不过我还没有使用它。@Bishwo,
system
没有给你进程ID,你可能会在Zend队列中看到,因为我对它也不太熟悉。