PHP komut fesih kaynağını bulmak için en iyi uygulama

0 Cevap php

Ben, bir veritabanından veri yığın çekiyor bunu işler ve daha sonra veri olup olmadığını görmek için görünen bir PHP komut dosyası var. Bu süresiz çalışır işler ve ben tek bir sunucu üzerinde bir zamanda bu birkaç çalıştırın.

Bu gibi bir şey görünüyor:

<?php
    while($shouldStillRun)
    {
       // do stuff
    }
    logThatWeExitedLoop();
?>

Sorun bir süre sonra, bir şey işlemi çalışmasını durdurmak neden olur ve bunu hata ayıklama ve nedenini belirlemek mümkün olmamıştır, değildir.

İşte şimdiye kadar bilgi almak için kullanıyorum budur:

  • error_log - tüm hataları açılıyor, ama hiçbir hata hata günlüğüne gösterilir.
  • register_shutdown_function - Özel bir kapatma fonksiyonu Kayıtlı. Bu yüzden işlem sunucu tarafından öldürülüyor değil biliyorum denilen olsun demek, bunu bitirmek için izin ediliyor. (or at least I assume that is the case with this being called?)
  • debug_backtrace - Benim özel kapatma fonksiyonu () bir debug_backtrace günlüğe kaydedilir. Bu yalnızca bir çağrı gösterir ve bu benim özel kapatma fonksiyonu bulunuyor.
  • Log if reaches the end of script - döngünün dışında, ben komut döngü çıkıldı (ve bu nedenle normalde kaynak dosyanın sonuna ulaşan olacağını) bu günlükleri bir işlevi var. Komut rastgele öldüğünde, bu günlüğü değil, bu yüzden işleme ortasında iken onu öldürür olursa olsun, onu öldürür.

Başka ne hata ayıklama yöntemleri suçlu bulmak için önerirsiniz?

Note: I should add that this is not an issue with max_execution_time, bu komut devre dışı edilmektedir. Öldürülmeden önce zaman tutarsız. O ölür önce 10 saniye veya 12 saat çalıştırabilir.


Update/Solution: önerileriniz için teşekkür ederiz. Çıkışı giriş yaparak, bir MySQL sorgu başarısız olduğunda, komut dosyası () ölmek ayarlanmış olduğunu keşfetti. D'oh. Mysql log hataları ve daha sonra sonlandırmak için güncellendi. Bir cazibe gibi Şimdi çalışma var!

0 Cevap