Лучшая практика для поиска источника завершения сценария PHP

У меня есть PHP-скрипт, который захватывает кусок данных из базы данных, обрабатывает его, а затем проверяет, есть ли еще данные. Эти процессы выполняются бесконечно, и я запускаю несколько из них одновременно на одном сервере.

Это выглядит примерно так:

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

Проблема в том, что через некоторое время что-то заставляет процесс перестать работать, и я не был в состоянии отладить его и определить причину.

Вот что я пока использую для получения информации:

  • error_log - ведение журнала всех ошибок, но в журнале ошибок не отображаются ошибки.
  • register_shutdown_function - Зарегистрирована пользовательская функция выключения. Это вызывается, поэтому я знаю, что процесс не убивается сервером, ему разрешено завершиться. (или, по крайней мере, я предполагаю, что это так, когда это вызывается?)
  • debug_backtrace - Зарегистрировал debug_backtrace () в моей пользовательской функции выключения. Это показывает только один вызов, и это моя пользовательская функция выключения.
  • Журнал, если дойдет до конца скрипта - Вне цикла у меня есть функция, которая регистрирует, что скрипт вышел из цикла (и, следовательно, достигнет конец исходного файла обычно). Когда сценарий умирает случайным образом, он не регистрирует это, поэтому все, что его убивает, убивает его, пока он находится в середине обработки.

Какие другие методы отладки вы бы предложили для поиска виновника?

Примечание: я должен добавить, что это не проблема с max_execution_time , который отключен для этих сценариев. Время до убийства несовместимо. Он может работать в течение 10 секунд или 12 часов, прежде чем он умрет.


Обновление / решение : Спасибо всем за ваши предложения. Регистрируя вывод, я обнаружил, что при сбое MySql-запроса сценарий был установлен на die (). Ооо. Обновлен, чтобы регистрировать ошибки mysql, а затем прекращать работу. Теперь он работает как шарм!

6
задан Nate Weiner 25 November 2010 в 17:15
поделиться