【发布时间】:2013-11-28 07:32:04
【问题描述】:
好的,这将是一个非常奇怪的请求/问题。
有一个运行时间很长的 PHP 脚本需要由技术不熟练的用户(管理员)启动。通过 apache 运行脚本时,它会引发超时(502 或 504 Bad Gateway)。
让我们假设无法配置 apache 来修复超时问题。
我想在管理面板中创建一个按钮,该按钮将 AJAX 调用发送到服务器上的 PHP 脚本,该 PHP 脚本将充当某种代理来启动 shell 命令。然后,shell 命令将使用某些参数执行长时间运行的 PHP 脚本......但我不希望它等待长时间运行的脚本完成。代理 PHP 脚本可以退出并根据 shell 命令是否实际启动返回 true/false(这部分是可选的)。
本质上,让 PHP 启动一个 shell 命令来启动一个 PHP 脚本。
我怎样才能完成这样的事情?
【问题讨论】:
-
这不是一个奇怪的问题......它实际上很常见,并且以前在这里被问过很多次。真正的问题是……你能在这台服务器上做什么?您可能会发现 Cron 作业最适合需要定期发生的某些事情。此外,如果需要,您可以使用一些作业排队方法。你到底想做什么?
-
我拥有服务器的完全根访问权限。我了解 cron 作业,并且已经设置了一些可以执行其他任务的设置。但是,此任务取决于用户操作。我正在尝试对超过 100,000 条记录的某些 opencart 产品进行大量插入/更新。查询已经全部优化,只是按顺序排列了很多。
-
我会在您的数据库中建立一个作业队列表,并在用户安排作业时添加一行。有一个每分钟左右运行一次的 cron 作业来启动该作业。然后,它可以更新其在该数据库中的状态以供用户查看。还有其他可用的排队系统,您甚至可以使用一些 pub/sub,但对于简单的事情,启动作业的 cron 作业效果很好。
-
这实际上是我的问题的一个非常优雅的解决方案。因为我确信在从 PHP 运行 shell 命令时会遇到权限问题。