Способы планирования длительных задач laravel без прав root и привилегированного пользователя - PullRequest
1 голос
/ 05 июля 2019

Я и моя команда используем сервис общего хостинга с ограниченным контейнером linux ( без root и привилегированного пользователя ), и нам нужно разработать новую функцию, которая включает в себя долго выполняющиеся задачи (> 600 мс).

Мы подумали о двух возможных решениях:

  1. Разбивая задачу и через интерфейс, сделайте один отдельный http-запрос к серверу.

  2. Используйте экран bash для запуска сценария bash с бесконечным циклом, вызывающим php artisan schedule:run (имитируя cronjob)

Я не чувствую себя очень комфортно с первым решением, по моему мнению неправильное перемещение логики сервера в браузер.

Второе решение - только предположение (не проверено), мы не уверены, что экран bash случайно остановится в любое время.

Каков был бы наименее неустойчивый способ достижения нашей цели? Thx

1 Ответ

1 голос
/ 05 июля 2019

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


Если фактический CRON, использующий планировщик, действительно исключен, я думаю, что создание конечной точки HTTP, которую вы могли бы вызвать из браузера, является следующей лучшей вещью. Только не думайте, что конечная точка, которую вы можете вызвать из браузера, вы можете только позвонить из браузера;)

Взять, к примеру, https://www.easycron.com/ (нет связи, кроме первого результата Google). Вы можете настроить задание CRON, чтобы вызвать URL для запуска этих заданий в интервале CRON. Внутренне в моей компании называется "CRON бедняков":)


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

Если вы идете по этому маршруту (или любому CRON-маршруту), вы можете добавить некоторый мониторинг, используя, например, https://healthchecks.io/ (опять-таки без присоединения, Google). Это позволяет вам определить расписание CRON и дает вам URL для вызова после его завершения, если ваш CRON не вызывает этот URL в соответствии с расписанием CRON, вы будете уведомлены. Хорошо иметь в качестве страховки.

...