2017-05-18 62 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

相關問題