Запуск скриптов по расписанию без крона

Тема в разделе "PHP", создана пользователем aszxc, 10 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. aszxc

    aszxc Создатель

    Регистр.:
    1 апр 2007
    Сообщения:
    38
    Симпатии:
    1
    Как запускать пхп скрипты по расписания БЕЗ ИСПОЛЬЗЫВАНИЯ КРОНА?
     
  2. RxB

    RxB

    Заблокирован
    Регистр.:
    16 июл 2007
    Сообщения:
    236
    Симпатии:
    51
    1. Использовать сервисы внешнего крона
    2. Кроном с другого сервера
    3. Кроном со своего компа
    4. Если позволяет хостер, то написать скрипт с set_time_limit(0), там по while(1) проверять время и дёргать через file_get+contents
     
  3. aszxc

    aszxc Создатель

    Регистр.:
    1 апр 2007
    Сообщения:
    38
    Симпатии:
    1
    Первые 3 варианта не подходят.set_time_limit(0) ничего не дает.
    про это можно поподробнее)
     
  4. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    236
    Симпатии:
    60
    5. Если расписание не нужно идеально точным или на сайте много посетителей, то запуск крон задачи можно повесить на index.php.
     
  5. aszxc

    aszxc Создатель

    Регистр.:
    1 апр 2007
    Сообщения:
    38
    Симпатии:
    1
    Скрипт должен запускаться раз в 30-40 минут(ориентировочно) такую точность возможно обеспечить? Если да,выложите пожалуйста решение.
     
  6. RxB

    RxB

    Заблокирован
    Регистр.:
    16 июл 2007
    Сообщения:
    236
    Симпатии:
    51
    Если set_time_limit(0) ничего не даёт, то подробнее можно не описывать. Лучше воспользуйся советом из следующего поста.
     
  7. Виллен

    Виллен

    Регистр.:
    12 мар 2009
    Сообщения:
    236
    Симпатии:
    60
    Как сделано напримр в TbDev
    PHP:
    function autoclean() {
        global 
    $autoclean_interval$rootpath;

        
    $now time(); // получаем текущее время
        
    $docleanup 0;

        
    $res sql_query("SELECT value_u FROM ".TABLE_AVPS." WHERE arg = 'lastcleantime'"); // запрашиваем время последнего запуска
        
    $row mysql_fetch_array($res);
        if (!
    $row) { // если нет записи вообще то создаем и выходим (первый запуск)
            
    sql_query("INSERT INTO ".TABLE_AVPS." (arg, value_u) VALUES ('lastcleantime',$now)");
            return;
        }
        
    $ts $row[0];  // выбираем время предыдущего запуска из строки
        
    if ($ts $autoclean_interval $now// проверяем наступило ли время следущего запуска
            
    return;
        
    sql_query("UPDATE ".TABLE_AVPS." SET value_u = $now WHERE arg = 'lastcleantime' AND value_u = $ts"); // обновляем время последнего запуска
        
    if (!mysql_affected_rows())
            return;
    // ниже собственно сами функции которые надо выполнить по расписанию
        
    require_once($rootpath 'include/cleanup.php');

        
    docleanup();
    }
    Точность зависит от количества поситителей.
    Если пользователи заходят хотябы раз в минуту, то скрипт не хуже крона
    А если например за ночь посетителей не будет часа два то 40 минутный интервал будет пропущен.
     
  8. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Ога, и повесить проц, чтобы сначало все тормозило, а затем отключили за перегрузку.
    Либо, если подойдет проверяйте с каждым посетителем время, и если пора, и выполняйте обновление. Либо, как уже писали, используйте внешний вызов по расписанию.
     
  9. aszxc

    aszxc Создатель

    Регистр.:
    1 апр 2007
    Сообщения:
    38
    Симпатии:
    1
    Ни один из вариантов не подходит.Неужели нет какого то решения?
     
  10. RxB

    RxB

    Заблокирован
    Регистр.:
    16 июл 2007
    Сообщения:
    236
    Симпатии:
    51
    Внешний та чем не подходит?
     
Статус темы:
Закрыта.