2017-05-18 60 views
4

我有一个Python脚本可以转换PDF文件。它在我的Laravel应用程序通过PHP叫:为什么从PHP调用长时间运行的Python脚本失败

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

这正常工作与任何PDF为250MB,但未能有较大的PDF,例如500MB的。

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

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

Laravel队列工作器在超时设置为0(无超时)的情况下运行。

在PHP CLI设置中是否还有其他可能导致失败的问题?是否有任何知道错误记录的地方 - failed_jobs表中没有任何内容,laravel.log中没有任何内容,我的Bugsnag集成没有任何内容。

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

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

我使用Laravel 5.4,Ubuntu服务器,Python 2.7.12。

回答

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 
+0

嗯。我已经将内存设置为25000.执行时间为30 - 但是我有很多队列作业需要3-5分钟才能解决?我刚刚尝试设置执行时间为900(15分钟),并在大约5分钟后失败... – samiles

+0

我试着将'php-cli'和'php-fpm' .ini文件设置为'memory_limit = 50000M'并且'max_execution_time = 3600',但脚本仍然在5分钟左右死亡:\没有错误,它只是从顶部消失,其余队列作业无法运行。 – samiles

相关问题