LINUX.ORG.RU

Как отследить причину завершения скрипта

 ,


0

2

Всем привет!

Не могу никак разобраться... Есть что-то вроде демона на PHP, скрипт запускается и висит в фоне, в бесконечном цикле работает с mysql и memcached. Но периодически выполнение прерывается, почему-то вылетает.

Когда запускаю просто из консоли php5 -f /path/to/script.php оно работает и не вылетает, ошибок не выдает, всё как часы. Когда же запускаю в фон php5 -f /path/to/script.php & Оно поработает какое-то время, может минут 10, а может и 2 часа - по-разному и вылетает.

По времени ограничений нет, вывод ошибок включен

set_time_limit(0); error_reporting(E_ALL); ini_set('display_errors', '1');

В error_log ошибок нет, в консоли чисто, просто прекращается выполнение. Как еще можно отследить причину остановки? На этом же сервере по подобному принципу работает еще 3 других демона таких и никогда не было подобных проблем.

Запусти на долгое выполнение в screen Логируй ключевые моменты выполнения скрипта в тот же мемкеш error_log если мне никто не изменяет ведет апач - в режиме cli там ничего и не должно быть Вангую сегфолт в одном из используемых модулей

botan ()

Когда же запускаю в фон php5 -f /path/to/script.php & Оно поработает какое-то время, может минут 10, а может и 2 часа - по-разному и вылетает.

Когда процесс запускается с «&», родительским процессом нового процесса (php) будет являться процесс твоего терминала. можешь проверить это по pstree. Соответственно, если ты после этого дисконнектишься по таймауту из-за «Broken pipe» или «Connection closed by foreign host», дочернему процессу посылается SIGHUP, который ведет к его завершению.

Попробуй запустить так: nohup php5 -f /path/to/script.php &

Adonai ★★★ ()
Ответ на: комментарий от Adonai

Попробуй запустить так: nohup php5 -f /path/to/script.php &

Спасибо, заработало как надо :)

Wishmaster ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.