2011-09-03 18 views
6

Yapılması gereken işlerin listesi için veritabanını sorgulayan ve diğer PHP betiklerini veritabanında buldukları (temelde bir işlem sırası) verilerine dayanan bir PHP betiğine sahibim.PHP shell_exec Komut dosyasının bitmesini bekleyin.

Kuyruk yürütücüsü komut dosyasının çalıştırdığı komut dosyalarından bazıları çalışmayı bitirmek için 30 saniye kadar sürebilir (PDF oluşturma, görüntüleri yeniden boyutlandırma, vb.).

Sorun, sıra koşucusu komut dosyasında shell_exec() işlem komut dosyalarını çağırmasıdır, ancak daha sonra tamamlanmamasıyla sonuçlanmaları için beklemelerini beklemez.

Kuyruk koşucu komut:

#!/usr/bin/php 
<?php 
    // Loop through database and find jobs to be done 
    shell_exec(sprintf("/root/scripts/%s.php", $row['jobName'])); 
?> 

İş komut:

#!/usr/bin/php 
<?php 
    shell_exec("/usr/bin/htmldoc -t pdf --webpage test.html > test.pdf"); 
    // Update database to mark job as completed 
?> 

komut satırından doğrudan iş komut çalıştırma çalışır ve PDF oluşturulur.

Bunu nasıl düzeltebileceğiniz hakkında bir fikriniz var mı? Veya bir süreç kuyruğunu çalıştırmak için daha iyi bir yol?

+1

bazı kodlar gösterin lütfen –

cevap

7

bu deneyin:

shell_exec("nohup /usr/bin/htmldoc -t pdf --webpage test.html > test.pdf 2>&1 &"); 
İlgili konular