我有一个转换 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。
最佳答案
因为脚本有执行时间和内存限制,可以在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
关于php - 为什么从 PHP 调用的长时间运行的 Python 脚本会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44041958/