4

我有一个转换 PDF 文件的 Python 脚本。在我的 Laravel 应用程序中通过 PHP 调用它:

$command = escapeshellcmd("python /home/forge/default/pdf.py " . $id);
$output = shell_exec($command);

这适用于高达 250MB 的任何 PDF,但不适用于更大的 PDF,例如 500Mb。

如果我直接从命令行调用 Python 脚本,它可以正常工作并在大约 5 分钟内完成。只有在被调用时shell_exec才会失败。

这发生在 Laravel 排队作业中,据我所知不是使用 HTTP/PHP FPM,而是命令行,应该没有超时?

Laravel 队列工作者正在运行,超时设置为 0(无超时)。

PHP CLI 设置中是否还有其他可能导致此操作失败的内容?有什么知道错误将记录在哪里 -failed_jobs表中没有任何内容,没有任何内容laravel.log,并且我的 Bugsnag 集成没有捕获任何内容。

由于它从命令行运行正常,我猜这不是 Python 问题,而是与从 PHP 调用它有关。

服务器有 60Gb 的 RAM,通过 观察进程htop,它永远不会超过 3% 的 RAM 使用率。会不会有其他硬编码的 RAM 限制?

我正在使用 Laravel 5.4、Ubuntu 服务器、Python 2.7.12。

4

1 回答 1

0

这是因为脚本有执行时间和内存限制,你可以在 php.ini 中检查。通常它max_execute_time = 30s。和内存限制默认128M

; Maximum execution time of each script, in seconds
; http://php.net/max-execution-time
; Note: This directive is hardcoded to 0 for the CLI SAPI
max_execution_time = 300

和内存限制

; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
memory_limit = 1280M
于 2017-05-18T08:15:36.193 回答