как создать процесс планирования php?

Мне было предложено создать веб-приложения, которые будут отправлять обновления пользователю в течение определенного времени.

например

  1. user1 запрашивает обновления каждые 5 минут с июня по август 2009 г.
  2. user2 запрашивает обновления каждые 10 минут на сегодня только
  3. user3 запрашивает обновления каждые 1 день с июня – август 2009

Я не знаю, как автоматизировать фоновый процесс … добавить в cron? Может ли cron работать на сервере Windows (apache на windows)?

На Windows Server вы можете писать запланированные задачи. В запланированной задаче вы можете установить его для запуска обновления до требуемой частоты.

Из базы знаний Майкрософт :

С помощью запланированных задач вы можете планировать запуск любого сценария, программы или документа в удобное для вас время.

Более программным подходом было бы сохранить настройки у ваших пользователей и последнее время обновления. Тогда вы можете иметь скрипт, который проверяет это и запускает обновление по мере необходимости.

У вас может быть запланированная задача для запуска этого скрипта каждую минуту или около того, что будет делать обновления на основе настроек ваших пользователей.

По предложению Марселя, я бы создал одно задание cron (* nix) / запланированное задание (Windows) и пропустил его один раз в минуту.

Затем эта работа просматривает все подписки на обновления пользователей, определяет, для чего необходимо отправить новое обновление, и отправить их. Очевидно, вы захотите, чтобы эта работа завершилась менее чем за минуту (если задание выполняется каждую минуту), что может быть проблемой, если вы попытаетесь обработать многих пользователей за один раз.

Я бы не рекомендовал пытаться создавать и управлять заданиями cron / запланированными задачами из PHP. Гораздо проще установить одно задание один раз, а затем обработать остальные в PHP-коде.

Если задание cron / запланированные задания не сработают для вас, вы также можете рассмотреть возможность подгонки по обычным запросам на ваш сайт. Это, например, то, как программное обеспечение Википедии MediaWiki обрабатывает фоновые задачи – они сняты с очереди заданий и обрабатываются как часть несвязанных запросов страниц.

Добавьте задачу Cron или Scheduled, которая выполняется в самый низкий общий интервал (5 минут? 1 минута?).

Запланированная задача должна запрашивать таблицу базы данных, в которой содержится информация о частоте задачи пользователя. Я бы сказал, частота в секундах, а затем использовать временную метку UNIX, чтобы определить право на исполнение. Вычисление тогда несколько просто:

  • Найдите текущее время, округленное до ближайшего общего интервала (при условии 60-секундного интервала): NOW = TIMESTAMP – (TIMESTAMP% 60)
  • Найти пользователей, интервал которых является четным делителем текущего периода времени

Таблица может выглядеть так:

CREATE TABLE `scheduled_tasks` ( `id` int(7) unsigned NOT NULL auto_increment, `user_id` int(7) unsigned NOT NULL, `task` varchar(32) NOT NULL, `interval` int(10) NOT NULL, `date_start` date NOT NULL default '0000-00-00', `date_end` date NOT NULL default '2030-12-31', -- Hopefully you won't be still maintaining this app PRIMARY KEY (`id`) ) ; INSERT INTO `scheduled_tasks` (user_id, task, interval, date_start, date_end ) VALUES (1, 'standard_job', 5*60, '2009-06-01', '2009-08-01'), (2, 'standard_job', 10*60, CURDATE(), CURDATE() ), (3, 'standard_job', 24*60*60, '2009-06-01', '2009-08-01') 

Чтобы найти задания для запуска, этот запрос может работать:

 SELECT `user_id`, `task` FROM `scheduled_tasks` WHERE (UNIX_TIMESTAMP() - (UNIX_TIMESTAMP() % 60 ) ) % `interval` = 0 AND CURDATE() BETWEEN `date_start` AND `date_end` 

Это возвращает список пользователей / задач для запуска. При необходимости вы можете добавить несколько записей для каждого пользователя.

windows не использует cron, но я думаю, что у него есть какое-то планирование. Ответ, в общем, да, задание cron – это способ запустить те, что находятся в фоновом режиме.

Если вы находитесь на выделенном сервере, вы можете использовать «Системные инструменты»> «Запланированные задания» на сервере Windows. Если вы действительно ничего не можете изменить на сервере, вы можете попробовать запустить cron на сервере Linux, отправив запрос на ваш сервер Windows … hehe

Я только что написал проект, который использует Apache, PHP и запланированные задачи под Windows XP и 2003. Это довольно просто и работает подобно cron.

Одно замечание – элементы управления графическим интерфейсом для запланированных задач не так подробно, как в командной строке. Я не мог планировать больше, чем раз в день. К счастью, вы можете использовать командную строку для этого.

schtasks / create / sc minute / mo 10 / st 00:00:00 / tn «Имя задачи здесь» / ru «Система» / tr «C: \ wamp \ bin \ php \ php5.3.0 \ php.exe \" C : \ Program Files \ script.php \ ""

Это создает запланированные задачи, которые запускаются каждые 10 минут (начиная с полуночи) под названием «Имя задачи здесь» под идентификатором «System». Вы видите скрытые цитаты вокруг пути? Вам нужно будет положить экранированные кавычки вокруг путей, в которых есть пробелы.