繁体   English   中英

php exec并运行bash脚本直到完成

[英]php exec and running a bash script until its finished

我有一个bash脚本,可能需要几个小时才能完成。

我有一个Web前端,使其易于使用。

在此主页上,我想输入一个按下以启动php命令的网址

<?exec('myscript that take a long time');?>

exec完成后,我希望它加载cookie。

setcookie('status',"done");

这一切都很容易完成,并且可以照常工作。 但是,加载我的exec命令的URL是空白的白页。 我不想要这个。 我希望url是一个启动phpscript并在exec命令在后台全部返回时设置cookie的操作。

这可能吗?

如果没有,我能接近这种行为。

编辑:

function foo(){

var conn = new Ext.data.Connection();
conn.request({
url:‘request.php’,
method:‘POST’,
success: function(responseObject) {
    alert(“Hello,Word!”);
},
failure: function() {
alert(“Something fail”);
}
});}

我没有运气尝试过上面的代码。

我有一个bash脚本,可能需要几个小时才能完成

到此为止 那是你的第一个问题。 WWW的设计目的不是将打开的请求维护超过几分钟。 也许有一天(因为我们现在有了websockets),但是即使您知道如何配置Web服务器,因此对于经过的任何人来说,这也不是一个关闭开关,但介于两者之间的网络或您的浏览器很可能愿意等待此操作长。

不能与Web请求同步完成此作业的运行。 必须异步运行

一定要从网页上(通过meta-refresh或ajax)查询作业的状态,但是我很难理解在完成cookie时设置cookie的好处。 通常对于这样的事情,我会在任务完成时从任务中发送一封电子邮件。 您还需要一种方法来分离这样调用的并发任务,或者确保一次只运行一个的方法。

一种解决方案是将PHP会话ID作为参数传递给脚本,然后让脚本在完成时编写一个以会话ID命名的文件-甚至通过该文件提供部分更新-然后您的网页即可轮询使用会话ID的作业。 当然,您的代码应在开始新作业之前检查尚未运行的作业实例。

尽管其他答案是正确的,并且WWW并非公开请求,但我们必须考虑到www从来都不是获取信息的 “手段”。

作为程序员,我们使之接受了诸如登录之类的信息。

更进一步,我的问题很简单,我该如何对结果B进行操作A。正如@symcbean的另一篇文章所建议的那样,尽管发送和发送电子邮件会很不错,但它不是解决方案,而是解决问题的一种方法。

Web应用程序通常需要与Web服务器进行通信以更新其状态。 这是矛盾的,因为网络服务器是无状态的。 Cookies是灵魂。

这是我的解决方案:

$.ajax({
  url: url,
  data: data,
  success: success,
  dataType: dataType
});
setcookie('status',"done");

网址是一个php函数页面,其中包含if语句作为switch语句并运行我的外部脚本,这需要很长时间。 该调用处于阻塞状态,也就是说,它将在完成之前不会执行setcookie。

一旦完成,它将设置我的cookie,并且我的Web应用程序的其余部分可以继续工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM