Эта тема на forum.dklab.ru


Kedrian: Регулярный запуск скрипта
Нужно каждые 5с(или даже чаще) запускать некоторые файлы скрипта. Крон,как я понимаю,не подходит,т.к. его можно настроить минимум на 1 мин. Подскажите,пожалуйста,чем можно воспользоваться?
Миша Спларов:
Бесконечный цикл со sleep.
Kedrian:
Миша СпларовТоесть каждую минуту запускать кроном скрипт с бесконечным циклом со sleep,а уже в цикле будут выполняться нуные обновления системы? Я об этом думал,но на практике еще не использовал..
Миша Спларов:
Тогда нужно не забыть прервать скрипт по истечении минуты, чтобы два разных скрипта не делали одну и ту же работу.
Kedrian:
Миша Спларов Это да. Но вот еще что. Пользуюсь хостингом,думаю,там стоит максимальное время выполнения скрипта меньше минуты. Это как обойти?
dimagolov:
Пользуюсь хостингом,думаю,там стоит максимальное время выполнения скрипта меньше минуты.
Время исполнения обычно ограничивается для скриптов, запускаемых веб-сервером. Скрипты, запускаемые через CLI (а именно так их запускает cron), не имеют ограничения по времени исполнения, по крайней мере по умолчанию: http://www.php.net/manual/en/info.configuration.php#ini.max-execution-time
Ivan1986:
Как вариант можно запускать раз в час(или еще как) и в скрипте сделать проверку на повторный запуск скрипта например с помощью лок файла
только реализовать грамотно - держать файл открытым эксклюзивно, а не создавать/удалять, иначе при ошибках застопорится.

Примерно так


class ...
/**
* Защита от двойного вызова cron скрипта
*
* @param string $name Идентификатор скрипта
* @param string $message Сообщение когда скрипт уже запущен
*/
static public function doubleRun($name, $message='')
{
static $lockfiles;
if (!isset($lockfiles[$name]))
$lockfiles[$name] = fopen(TMPPATH.'/'.$name.'.run', 'w');
if (!$lockfiles[$name] ||
!flock($lockfiles[$name], LOCK_EX | LOCK_NB)
)
die($message);
}

Эта тема на forum.dklab.ru