У меня есть приложение для планирования, которое должно выполнить конкретную задачу на основе расписания, заданного пользователем. Это означает, что PHP-скрипт должен постоянно проверять базу данных и сравнивать с текущим временем и видеть, есть ли какое-либо совпадение. Очевидно, я не могу запустить бесконечный цикл.
Другие варианты включают работу cron. Однако, поскольку я запускаю все это на виртуальном хост-сервере, я не уверен, могу ли я запланировать запуск скрипта PHP каждые несколько секунд на основе cronjob. Думаю ли я правильно, и есть ли другая альтернатива? Или я могу выполнить cronjobs на виртуальных хостах (где у меня нет большой гибкости)?
Крон позволит вам запланировать поминутно, а не секунду. Таким образом, ваш скрипт должен будет позаботиться о полной минуте (или больше) и выйти после таймаута, чтобы после этого выполнить следующий цикл (задача, инициированная cron). Тем не менее, вы можете столкнуться с перекрывающимися проблемами, поэтому ваш скрипт должен проверять в первую очередь, работает ли еще один экземпляр сам по себе.
Вы можете проверить это: http://kvz.io/blog/2009/01/09/create-daemons-in-php/ для того, как заставить скрипт PHP стать демонами (и, таким образом, выполнить в фоновом режиме без полагаясь на Крон).
Есть ли у вас возможность перехватывать лечение для действия "вставки" ваших пользователей? (т.е. всякий раз, когда кто-то добавляет задание в очередь). Если да, вы можете использовать фоновый процесс (демон, см. Ссылку выше), который будет прослушивать сокет Unix, и ваше действие Add Job опубликовано в этом сокете. Это позволяет избежать активного и многократного опроса базы данных, чтобы проверить, зарегистрированы ли новые рабочие места.
Вы можете запустить php-скрипт в бесконечном цикле, однако я не уверен, действительно ли это имеет смысл.
Вы можете манипулировать настройками php в своем php-скрипте, чтобы удалить максимальное время выполнения. О cronjob я бы сразу вызвал исполняемый файл php5 для запуска вашего скрипта, с некоторой логикой, чтобы избежать двойных казней. Например, напишите текущее время на файл блокировки, поэтому, если последний раз старше, чем можно сказать, 5 минут, когда скрипт разбился и должен начаться сейчас. Если не просто выйти.