Как непрерывно запускать скрипт PHP на сервере виртуального хоста?

0

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

Другие варианты включают работу cron. Однако, поскольку я запускаю все это на виртуальном хост-сервере, я не уверен, могу ли я запланировать запуск скрипта PHP каждые несколько секунд на основе cronjob. Думаю ли я правильно, и есть ли другая альтернатива? Или я могу выполнить cronjobs на виртуальных хостах (где у меня нет большой гибкости)?

  • 1
    То, что вы ищете, называется «chron job» - чтобы расширить мой ответ, это зависит от вашего хоста и работающей платформы, но если вам нужно что-то запускать «каждые пару секунд», вы можете пересмотреть, как у вас сейчас есть. Настройка системы, как это может быть тяжелой нагрузкой, особенно с большим количеством пользователей.
  • 0
    @Jhecht Вы имеете в виду cron правильно, а не chron? Каковы ваши предложения по изменению настроек системы? да, у меня будет много пользователей.
Показать ещё 8 комментариев
Теги:
database
cron

2 ответа

0

Крон позволит вам запланировать поминутно, а не секунду. Таким образом, ваш скрипт должен будет позаботиться о полной минуте (или больше) и выйти после таймаута, чтобы после этого выполнить следующий цикл (задача, инициированная cron). Тем не менее, вы можете столкнуться с перекрывающимися проблемами, поэтому ваш скрипт должен проверять в первую очередь, работает ли еще один экземпляр сам по себе.

Вы можете проверить это: http://kvz.io/blog/2009/01/09/create-daemons-in-php/ для того, как заставить скрипт PHP стать демонами (и, таким образом, выполнить в фоновом режиме без полагаясь на Крон).

Есть ли у вас возможность перехватывать лечение для действия "вставки" ваших пользователей? (т.е. всякий раз, когда кто-то добавляет задание в очередь). Если да, вы можете использовать фоновый процесс (демон, см. Ссылку выше), который будет прослушивать сокет Unix, и ваше действие Add Job опубликовано в этом сокете. Это позволяет избежать активного и многократного опроса базы данных, чтобы проверить, зарегистрированы ли новые рабочие места.

  • 0
    Спасибо за ссылку. Я думаю, что мои возможности могут быть ограничены, потому что я на виртуальном хосте и у меня нет прав на установку Pear или других пакетов. Но я обязательно буду просить об этом. Я не совсем понял ваш последний абзац. Можешь объяснить дальше?
  • 0
    В моем последнем абзаце я имею в виду: контролируете ли вы, как пользователь будет добавлять элементы в расписание?
0

Вы можете запустить php-скрипт в бесконечном цикле, однако я не уверен, действительно ли это имеет смысл.

Вы можете манипулировать настройками php в своем php-скрипте, чтобы удалить максимальное время выполнения. О cronjob я бы сразу вызвал исполняемый файл php5 для запуска вашего скрипта, с некоторой логикой, чтобы избежать двойных казней. Например, напишите текущее время на файл блокировки, поэтому, если последний раз старше, чем можно сказать, 5 минут, когда скрипт разбился и должен начаться сейчас. Если не просто выйти.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню