Я пытаюсь создать веб-страницу, которая позволит мне начать и остановить PHP-скрипт. Скрипт является частью бэкэнд сайта, и ему необходимо будет получить доступ, прочитать данные, обработать эти данные и обновить базу данных на том же сервере, на котором существует скрипт. Кроме того, я хотел бы, чтобы веб-страница позволяла администратору просматривать текущий статус (работает или останавливаться) и даже ссылаться на журналы, созданные сценарием. Я начинаю идти по пути изучения функций PHP, passthru и связанных функций. Это правильный путь? Есть ли другие способы сделать это, что было бы более подходящим? Возможно ли это сделать на агностической платформе? Я разрабатываю стек LAMPP + CakePHP в Windows и хочу, чтобы функциональность существовала на любом веб-хосте, который я выбираю.
Я сделал это на недавней работе, но это, вероятно, слишком для вас. Я обработал работу, и он в основном устанавливает 2 таблицы в базе данных, минимум 2 объекта и минимум 2 контроллера.
Первая часть – это блок обработки заданий, состоящий из контроллера рабочего задания, который управляет запросом для запуска или продолжения задания, и он поставляется с двумя рабочими модулями JobQueue и Job. Вы можете удалить очередь, но всегда полезно совершать опрокидывание в таких системах, чтобы вы могли сказать, что 2,3,4 задания могут выполняться сразу.
Очередь – это только то, что это слот, который прикрепляет к нему несколько заданий и имеет статус очереди, чтобы определить, работает ли он прямо сейчас или нет.
Задача – это виртуальный объект, который сопоставляется с таблицей заданий, описывающей, что нужно делать. В моей реализации я создал интерфейс, который должен быть реализован в вызываемом контроллере и поле + тип в базе данных. Задание задает класс контроллера для вызова (не контроллер управления заданиями, другой контроллер, который управляет выполняемой операцией), и вызывает метод в нем, чтобы начать обработку задачи.
Теперь, чтобы запутаться, я заставил мою систему работать на выделенном сервере только для этой части, потому что я не хотел, чтобы задача загружала главный сервер или застревала очередь обработки Apache. Таким образом, у меня было два сервера, и мой класс Queue отвечал за вызов через IP-адрес страницы на другом сервере для выполнения задания на этом сервере. Когда работа была выполнена, она снова вызвала запрос HTTP для перезагрузки и выполнила следующую задачу. Если задача не осталась, тогда она просто умрет нормально.
Преимущество этого заключается в том, что для него не требуется cronjob (до тех пор, пока ваш скрипт супер стабилен и не может сбой), поскольку он запускается вами, когда вы этого хотите, а затем вы можете отпустить его, и он называет себя назад с fsockopen для запуска другого просмотра страницы, которое запускает следующее задание.
Рабочие подразделения
Важно понимать, что если ваши рабочие места очень большие, вы должны их сегментировать. Я использовал принцип «единицы работы» для описания 1 части, которую задание должно делать сколько угодно раз. Затем Процессор очереди также стал менеджером по времени, чтобы он мог определить, заняло ли занятие больше, чем X секунд, и просто отложит остальные шаги на более поздний период и перезвонит и продолжит работу. Таким образом, вам не нужно «устанавливать ограничение по времени», и вы не заклиниваете свой сервер, пока скрипт 30s будет выполнен.
Надеюсь, это поможет!
Чтобы запустить скрипт, который запускается постоянно, вам нужно подумать:
Ваш php-скрипт должен запускаться как CLI (командная строка) планировщиком заданий, например cron или другим. Не забывайте, что конфигурация вашего веб-сервера определила тайм-аут для исполняемого скрипта.
Чтобы работать 24 часа в сутки, возможно, вы предполагаете реализовать бесконечный цикл. В этом случае вы можете написать тест типа jobIsActive, который читает в файле или в базе данных каждый цикл, если задание должно выполняться или нет. Если вы нажмете на кнопку, просто измените статус задания (файл обновления, db …). Ваша обе кнопки могут остановить лечение или активировать его, но не остановить бесконечный цикл.
Бесконечный цикл – не самое изящное решение, почему бы вам не написать запись на вкладке cron для выполнения задания каждую ночь, и щелчок по кнопке может запустить ее вручную.