【问题标题】:Run background process from PHP on FastCGI在 FastCGI 上从 PHP 运行后台进程
【发布时间】:2012-10-05 18:10:45
【问题描述】:

我知道可以创建一个后台 PHP 进程,该进程可以从另一个 PHP 文件按需启动:

$command = "/usr/bin/php5 -f script.php";
exec( "$command > /dev/null 2>&1 &", $arrOutput);

但是,此解决方案仅在 PHP 作为 mod_php 运行时才有效。

有没有办法在 FastCGI 上做同样的事情?

似乎在 FastCGI 上,进程是由 FastCGI 一次又一次地启动和关闭的,有人有修复它的经验吗?

【问题讨论】:

  • 是的,您可以这样做。只需正确设置您的权限即可。
  • 是的,但我试过了,它不起作用。该过程似乎开始了,但它没有做任何事情。它甚至没有在它应该结束的时间之后结束 (sleep(30));.
  • 自从将 plesk 从 9 更新到 10 后,我也遇到了 fastcgi 和 exec 的问题。它似乎没有调用该函数。在这种情况下转换或 ffmpeg。你找到解决办法了吗?
  • 同样在这里执行convert ...仍然没有解决方案,我不想回到mod_php,因为它对我的需求来说太慢了

标签: php exec fastcgi mod-php


【解决方案1】:

你可以设置一个 cron 作业吗?如果不是,则必须在 PHP 中调用它,我曾经以跨平台方式模拟它,而无需使用 curl 访问 exec() 等(信不信由你)。

创建 .php 脚本并将其公开,并将其添加到顶部:

if (isset($_POST['key']) == false || $_POST['key'] != 'your secret key') {
    die(); //request not allowed
}

然后从另一个 PHP 文件中,创建一个安全 (https) curl 连接并将密钥发布给它,设置 curl 的超时时间为 5 秒(您也可以从请求页面发送一个 http 关闭连接标头)这样如果请求需要很长时间才能完成,调用脚本就不会冻结,在你的情况下是 30 秒。

这将执行以下操作: 1. curl 将安全地访问页面(无论如何都会停止在浏览器中访问它) 2. curl 将等待 5 秒,然后关闭连接(但您的两个 php 脚本都会继续)

无论操作系统内部、shell 等如何,它都兼容。您还可以根据需要调整超时等。

不是一个出色的解决方案,但希望它对您来说足够好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-14
    • 2013-10-09
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2021-04-06
    相关资源
    最近更新 更多