ФорумПрограммированиеPHP для идиотов → Выполнение заданий по времени (не cron).

Выполнение заданий по времени (не cron).

  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 10 февраля 2010 г. 21:43

    Возникла задача сделать у пользователей выполнение заданий по времени, как примитивное "начало 15,00 каждые два дня", так и расписание по неделям, а то и месяцам. Мне что для каждого задания таймер запускать? А как же тогда сервер? А если 100 000 пользователей? А как же тогда сервер?

    Думается в базу добавлять задание type, data, date, interval user, где код задания, дополнительная информация или данные к заданию, дата и время выполнения, интервал в секундах, пользователь. А больше ничего не думается…
    С возвращением, Пiха!
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 10 февраля 2010 г. 21:53, спустя 10 минут 17 секунд

    cron + perl/php/python/bash скрипт для проверки наличия заданий на текущий период и их выполнения. Задания, в большинстве случаев, можно выполнять ночью или в период наименьше посещаемости на сайте.

    Можно конечно при каждом запуске скрипта на самом сайте проверять есть ли задания, и если есть, выполнять, но это полный бред, если посетителей нет, то ничего выполено не будет
    Work, buy, consume, die
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 22:58, спустя 1 час 4 минуты 33 секунды

    Совсем не бред. Имеет смысл проверять задания обоими способами. Для конкретного пользователя в момент, например, его авторизации. А по крону в часы с низкой загрузкой проверять всю оставшуюся очередь.

    Если пользователь заходил, его задания проверялись, в таблице проставилось время этой проверки. Когда наступает время "C" скрипт смотрит у кого с последней проверки интервал еще не прошел и этого пользователя игнорирует.

    К примеру: система приема заказов должна высылать извещения на e-mail об изменении состояния заказов, но не чаще 1 раза в 24 часа. Если пользователь сам зашел, конечно сводка изменений должна собраться прямо сейчас, значит в ближайший сеанс рассылки его извещать не понадобится. Для этой системы «очередь заданий» это просто таблица пользовательских профилей с полем «время последней проверки заказов».
    ιιlllιlllι унц-унц
  • ivanscm

    Сообщения: 1251 Репутация: N Группа: Джедаи

    Spritz 10 февраля 2010 г. 23:03, спустя 5 минут 9 секунд

    А если критичность времени есть, например смс- рассылка? Каждый час по крону выполнять проверку на время запланированого задания и выполнять если время равно?
    С возвращением, Пiха!
  • Nyaah

    Сообщения: 574 Репутация: N Группа: Джедаи

    Spritz 10 февраля 2010 г. 23:07, спустя 3 минуты 39 секунд

    artoodetoo, ну вообще в чем-то ты прав, но смысла нету, на мой взгляд, делать проверку на самом сайте, лишний код писать, отлаживать. Все равно кроном все будет выполнено =)

    ivanscm, а какже, только нужно ещё сделать проверку на наличие уже запущенного скрипта, чтобы параллельно не делать одно и тоже. Вдруг скрипт за час не успел отработать…
    Work, buy, consume, die
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 10 февраля 2010 г. 23:10, спустя 3 минуты 34 секунды

    если время больше или равно

    Спустя 186 сек.
    Naaayh, если интересы пользователя тебя не волнуют, то пофигу.

    Возможно пользователь считает, что он видит актуальную информацию, а не просчитанную сегодня в полночь. это уже зависит…
    ιιlllιlllι унц-унц

Пожалуйста, авторизуйтесь, чтобы написать комментарий!