uzun süreçler php

5 Cevap php

i gerçekten uzun bir php script (dört buçuk, beş saat) çalıştırmak gerekir.

betik bazen başarıyla çalışır, ama bazen (hosting ile yapmak poss bir şey?) açıklanamaz öldürülüyor.

ben belki komut dosyasını çalıştırmak için çözüm daha küçük parçalar olduğunu düşünüyorum.

Bunu yapmak için ben bu durumu & bulunuyor saklayan bir senaryo yazdım bir xml dosyası konumu ve üzerindeki konumunu geçmeden önce, yazısının bir yığın yürütür.

i mevcut süreci sonlandırmak ve hangi, senaryonun son bit çengel sorun yaşıyorum Komut dosyasını yeniden yürütmek.

ya da belki ben tamamen yanlış ağaca havlıyor ediyorum!

i SO ve başka bir yerde bulabilirsiniz ne okudum ama hala hiçbiri akıllıca değilim: (

yardım lütfen!

dan

5 Cevap

Sonsuza kadar en çalıştırmak ancak veri inconsistend neden olmayacak bir komut dosyası var göz önüne alındığında, bir cronjob kullanabilirsiniz.

Sorun büyük olasılıkla istiyorsun iki kez başlamak yok, çünkü komut dosyası hala çalışıyorsa bilmeniz gereken olmasıdır. I aklında iki çözüm süreci betik (getmypid ()) ve id veya bir zaman damgası kullanılarak vardır.

PID için:

  • Komut başlangıçta kaydet PID (/ tmp / script_pid)
  • Tetik her dakika Cronjob. Tasarruf PID ile aktif bir süreç arama, ve eğer bulunmazsa başlar.

PHP'nin exec () (ve arkadaşlar) ve linux gibi komut satırı araçları '"ps" erişmeniz gerekir.

Damgası için:

  • Her yineleme damgası kaydedin.
  • Tetik her dakika Cronjob. Damgası X eskiyse, yeni bir süreç başlatmak.

Uzun X kendinizi nasıl olması gerektiğini anlamaya var.

PHP uzun süre çalışan scriptler için tercih edilen dil değil. Ben bir tarayıcıda bu çalışan varsayarak yaşıyorum? SSH üzerinden oturum ve php /path/to/script.php ile komut çalıştırmayı deneyin.

Bu şey ise size temel bir Apache / PHP yerel makineye yükleyin verebilecek yerel olarak çalıştırmak ve daha sonra çalıştırabilirsiniz. Eğer shell erişiminiz yoksa bunu kullanın.

Mümkünse, ben uzun süren süreç kendi süreç olmaya bölmek için çalışacağını söyledi. PHP komut hesaplamaları başlatmak ve sonra (mevcut hesaplama ilerlemeyi içeren bir devlet dosyası gibi bir şey) bitmiş olabileceğini ipuçları için görünmesini sağlayın. Bunu o zaman bile kullanıcıya güzel bir ProgressBar vermek için AJAX teknikler kullanabilirsiniz ;)

Bu sunucuda cron erişiminiz varsa sonraki veri yığın işlemek için her dakika sizin komut çalıştırabilirsiniz.

Ben Josh katılıyorum ve bu mümkünse bir masaüstü uygulaması gibi diğer bazı yol programı öneririm. PHP 4-5 saat çalıştırmak için komut dosyası gerektirir böyle bir şey için inşa emin değildi. Bu max_execution_time veya komut hosting ama ben önereceğim egzersiz masaüstü uygulaması veya SSH ile olan hareketli CPU yiyor emin olabilirsiniz.