PHP CLI скрипт не истекает - PullRequest
0 голосов
/ 20 июня 2011

У нас есть сценарий узла js, который запускает команду для выполнения следующей команды:

/usr/local/bin/php -q /home/www/441.php {"id":"325241"}

Этот сценарий выполняет много функций, однако, похоже, он не учитывает ограничение по времени.Первая строка этого файла:

set_time_limit(1800);

Тем не менее, если мы проверим, какие процессы выполняются на сервере (ps -aux | grep php), мы увидим множество этих команд, которые былиоткрыт с прошлой недели.

Есть идеи, как мы можем это почистить?

Ответы [ 3 ]

2 голосов
/ 20 июня 2011

Я нашел следующий комментарий в руководстве пользователя PHP для max_execution_time

Имейте в виду, что для CLI SAPI max_execution_time жестко задан в 0. Таким образом, он, кажется, изменяется ini_set или set_time_limit, но это не такнет, на самом деле.Единственные ссылки, которые я нашел на это странное решение, глубоко в bugtracker (http://bugs.php.net/37306) и в php.ini (комментарии для директивы max_execution_time ').

Так что может показаться, что есть ошибкав модуле CLI это означает, что max_execution_time эффективно игнорируется.

Комментатор упомянул страницу об ошибке в трекере об этом в http://bugs.php.net/37306, но трекер, кажется, не работает.

1 голос
/ 20 июня 2011

set_time_limit имеет значение только для php-части программы. Если у вас был запрос к базе данных, выполнение которого занимает 5 часов, эти 5 часов не учитываются php, поэтому они выходят за пределы ограничения set_time_limit. Сказав это, кажется странным, что процесс php все еще выполняется через неделю, если он не вызывает другую программу, которая выполняется вечно (что в данном случае set_time_limit не влияет на этот вызов).

Кроме того, что означает -q? Я не могу найти его ни в man php, ни php --help, ни в параметрах командной строки php .

0 голосов
/ 20 июня 2011

Если вы запускаете скрипт в nodejs, почему бы не убить его и там, после 1800-х годов?

var pid = startPHPProcess();

setTimeout(function() {
    killPHPProcess(pid);
}, 1800);
...