加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

卷曲替代Cron Job PHP

发布时间:2020-12-13 22:24:39 所属栏目:PHP教程 来源:网络整理
导读:我目前正在使用以下php exec命令在服务器端加载URL,因为我需要一个不涉及cron作业的解决方案,这也是异步的,即一旦任务启动,用户就可以从页面导航并且任务仍将执行: exec("nohup curl ".$dbupdateurl." /dev/null 21 echo $!"); 这在大多数情况下工作正常,但
我目前正在使用以下php exec命令在服务器端加载URL,因为我需要一个不涉及cron作业的解决方案,这也是异步的,即一旦任务启动,用户就可以从页面导航并且任务仍将执行:

exec("nohup curl ".$dbupdateurl." > /dev/null 2>&1 & echo $!");

这在大多数情况下工作正常,但是相当不可预测.是否有更好/更可靠的方法来实现这一目标?

谢谢,

马特

解决方法

如果您使用的是PHP-FPM,则可以使用 fastcgi_finish_request

This function flushes all response data to the client and finishes the request. This allows for time consuming tasks to be performed without leaving the connection to the client open.

这样,您可以使用PHP的本机函数在用户获得响应后执行webrequest.有关如何使用此功能的示例,请参见example of how to use fastcgi_finish_request()

如果您不使用PHP-FPM,则可以使用像Gearman这样的JobQueue来执行原始请求之外的工作.这可能是最可靠的方式,因为它是处理这类工作的专用系统.

另请注意curl can do async http requests.如果问题是您不想等待http响应,这可能比引入JobQueue更容易.

最后但并非最不重要的是,您可以分叉额外的PHP进程来完成工作.见How can I do time consuming task after sending response to client和php execute a background process

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读