php альтернатива CRON

Тема в разделе "Как сделать...", создана пользователем Lexon, 16 май 2015.

  1. Lexon

    Lexon Постоялец

    Регистр.:
    20 фев 2008
    Сообщения:
    114
    Симпатии:
    4
    Необходимо чтобы скрипт самостоятельно запускался(например каждые 5 минут), но без настройки крона, а средствами php. Это возможно?

    ---
    Помню давно, в 2009ом году были плагины для WP, которые тянули контент с RSS-ок, так вот, данные плагины запускались автоматом, нигде крон не прописывался. Значит как- то это можно сделать.
     
  2. Denixxx

    Denixxx

    Регистр.:
    7 фев 2014
    Сообщения:
    247
    Симпатии:
    191
    Можно, но необходимо помнить, что PHP привязан к заходу на сайт.
    То есть если пользователи на сайт заходят, то такой крон сработает, а если посетителей нет — то нет.
    Для этого нужно делать:
    1. Хранить очередь событий.
    2. Хранить время последнего срабатывания (модификация какого-то файла или запрос в БД).
    3. Регистрировать новые события.
    4. Исполнять события, если время их настало.
    5. Удалять старые события, в том числе и за ненадобностью.
     
    Lexon нравится это.
  3. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    Другой вариант: сделать скрипт, доступный из веба (можно по паролю), и запускать его путём запроса с другого сервера.
    А на этом "другом" сервере как раз таки крон.
     
    Lexon нравится это.
  4. ykpon

    ykpon

    Регистр.:
    8 дек 2012
    Сообщения:
    248
    Симпатии:
    143
    Можно и так. А почему не устраивает вариант с кроном на том же сервере, где и сам сайт?
     
    Lexon нравится это.
  5. DevOrc

    DevOrc Создатель

    Регистр.:
    5 июн 2014
    Сообщения:
    31
    Симпатии:
    10
    Два варианта)
    1. Демон на пхп (фоновый скрипт)
    2. Просто клиентский php скрипт который постоянно дергается посетителями в котором идет проверка последнего запуска с нужным интервалом в 5 мин
     
    Lexon нравится это.
  6. Lexon

    Lexon Постоялец

    Регистр.:
    20 фев 2008
    Сообщения:
    114
    Симпатии:
    4
    Спасибо за ответ, но к сожалению посетителей нет( а так, идея прикольная =)

    Спасибо за ответ, крон что там что тут одно и тоже, но не в этом суть. А возможно ли такое, что задачи крону задаются не через панель хостинга а через ПХП? Допустим есть скрипт с формой, туда прописываешь всё что хочешь получить от крона и всё работает?


    Спасибо за ответ. Можете подсказать, где лучше всего почитать про фоновые скрипты и Демон на ПХП? Тема интерсная
     
  7. DevOrc

    DevOrc Создатель

    Регистр.:
    5 июн 2014
    Сообщения:
    31
    Симпатии:
    10
    Lexon нравится это.
  8. Finnland

    Finnland Создатель

    Заблокирован
    Регистр.:
    22 авг 2014
    Сообщения:
    10
    Симпатии:
    35
    Пробуй
    PHP:
    <?php // функция запуска скрипта через определенный интервал времени (аналог cron)
       
    ignore_user_abort(); // запускаем скрипт в фоновом режиме
       
    set_time_limit(0); // запускаем скрипт всегда
       
    $interval=60*15// интервал в секундах (сейчас установлено 15 минут)
       
    do
          {
                
    // собсно пишем сам скрипт..... тот, который хотим выполнять каждые 15 минут, например отправку письма с ругательствами плохому человеку или что-то по-сложнее (вобщем все зависит от вашей фантазии)...
    sleep($interval); // инициируем интервал запуска скрипта
          
    }
       while(
    true);
    ?>
    Только хостер может быстро прибить это усё((((
     
    Duймовочка и Lexon нравится это.
  9. Lexon

    Lexon Постоялец

    Регистр.:
    20 фев 2008
    Сообщения:
    114
    Симпатии:
    4

    Беда с этим set_time_limit(0);
    на обычном хостинге нельзя лимит убрать, на денвере работает, попробую ещё на VDS.
    ===============
    Огромное спасибо, буду разбираться )
     
  10. PapaJoe

    PapaJoe

    Регистр.:
    4 авг 2008
    Сообщения:
    620
    Симпатии:
    311
    В таком случае вы можете попробовать выполнить этот скрипт в фоновом режиме
    PHP:
    system("/usr/bin/php script.php &");
    будет работать до перезагрузки, либо пока не вырубит админ