Задать вопрос
Elena0394
@Elena0394

Как узнать из-за чего прерывается фоновый процесс запущенный через exec?

Запускаю процесс так
//main.php
exec('nohup php test.php >> ./logfile.log 2>&1 &');
exit;

//test.php
ini_set('max_execution_time', '0');
for ($i = 0; $i < 1000; $i++) {
  file_put_contents('file-test.txt', $i . "\n", FILE_APPEND);
  sleep(1);
}

процесс завершается где-то на 200 секунде. В logfile.log ничего нет. Посмотрела лимиты ulimit -a они высокие, явно не из-за них. Вот как отловить из-за чего завершается процесс раньше чем весь цикл пройдет?
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой 10 комментариев
Пригласить эксперта
Ответы на вопрос 2
@rPman
Тут только остается заполнять test.php выводом отладочной информацией, добавляя после каждого вывода fflush или аналог (как вариант, вывод логов в другое место, вплоть до БД).

Без логирования есть еще вариант отладка в какой-нибудь среде разработки, но... вопрос а на домашнем компьютере все работает?
Ответ написан
@Vitsliputsli
В logfile.log ничего не будет, вы же ничего не выводите в поток.
Проверяйте логи php, если там ничего нет, проверяйте как вы их пишете (если не меняли ничего в логировании, то должны писаться).
Если логи работают (эмулируйте fatal error и посмотрите), но ничего в них нет, значит чтото внешнее убивает процесс php не давая ему возможности записать лог. Обычно так жестко поступает oom killer.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы