【发布时间】:2022-12-08 06:48:27
【问题描述】:
我正在尝试在 Laravel 8 中构建一个视频编辑应用程序。当您单击一个按钮时,它会通过运行 shell_exec 命令的 ajax 调用一个路由,该命令可能需要 10 分钟或更长时间才能运行。
它正在运行 ffmpeg 命令。我希望页面知道脚本何时完成,以便它可以在浏览器中重新加载视频,但如果用户关闭浏览器,脚本继续运行也很重要。
一切正常,但问题是站点上的所有页面都被冻结并且在 ffmpeg 完成之前无法加载 - 即 localhost:8000 中的所有页面。 localhost/ 上的页面都很好。
我读到解决方案是将 session_write_close() 放在 shell_exec 之前,而在 Laravel 中你应该将 session()->save() 或 $request->session()->save(); ?但是我尝试过的任何事情都没有任何区别。
在此先感谢,如果有人可以帮助解决这个问题。
【问题讨论】:
-
我不知道这是否对您有帮助,但您是否尝试过使用“nohup”运行 exec 命令?基本上 nohup 在后台发送 exec 命令,页面仍然可用并且可以做任何您想做的事情。使用 exec 正在调用的脚本在视频处理完成后更新数据库,然后我会使用 ajax 调用(可能每 5 秒一次)在视频完成时检查数据库更新。