Systemd сервіси для Laravel Queue: від теорії до практики

Що таке Laravel Queue та навіщо воно потрібне?

Laravel Queue – це система черг для виконання тривалих завдань у фоновому режимі. Замість того, щоб користувач чекав поки відправиться email або обробиться велика кількість даних, ці завдання додаються в чергу і виконуються незалежно від веб-запиту.

Приклади використання черг:

  • Відправка email повідомлень
  • Обробка зображень (зміна розміру, оптимізація)
  • Генерація звітів
  • Синхронізація з зовнішніми API
  • Бекапи та очищення даних
  • Відправка push-нотифікацій

Без черги:

З чергою:

Що таке Systemd?

Systemd – це система ініціалізації Linux, яка управляє системними сервісами. Вона автоматично:

  • Запускає сервіси при завантаженні системи
  • Перезапускає сервіси якщо вони падають
  • Логує роботу сервісів
  • Дозволяє керувати сервісами (старт/стоп/перезапуск)

Чому не php artisan queue:work в терміналі?

Коли ви закриваєте термінал – процес queue:work зупиняється. Systemd вирішує цю проблему, роблячи queue worker системним сервісом.

Створення Systemd сервісу для Laravel Queue

Крок 1: Створити конфігураційний файл

Базовий приклад сервісу:

Розбір параметрів:

[Unit] секція:

  • Description – опис сервісу
  • After – запускати після мережі та баз даних
  • Requires – обов’язкові залежності (MySQL)
  • Wants – бажані залежності (Redis)

[Service] секція:

  • Type=simple – простий тип сервісу
  • User/Group=www-data – від якого користувача запускати
  • Restart=always – завжди перезапускати при падінні
  • RestartSec=3 – пауза 3 секунди перед перезапуском
  • ExecStart – команда для запуску
  • WorkingDirectory – робоча директорія
  • StandardOutput/Error=journal – логувати в systemd journal

[Install] секція:

  • WantedBy=multi-user.target – в якому режимі активувати

Крок 2: Активувати сервіс

Продвинута конфігурація

Множинні черги з різними пріоритетами:

Шаблони сервісів для масштабування:

Запуск кількох воркерів:

Environment змінні та секрети:

Управління та моніторинг

Основні команди:

Перегляд логів:

Моніторинг через Laravel

Додати в cron для регулярного моніторингу:

Troubleshooting та кращі практики

Типові проблеми:

1. Сервіс не запускається:

2. Воркер зависає:

3. Проблеми з правами:

Кращі практики:

1. Graceful shutdown:

2. Health checks:

3. Логування:

Альтернативи та порівняння

Supervisor vs Systemd

Supervisor:

Переваги Systemd:

  • Інтеграція з системою логування
  • Кращі можливості для dependency management
  • Стандартний інструмент Linux
  • Автоматичні restart policies

Переваги Supervisor:

  • Простіша конфігурація
  • Web-інтерфейс для моніторингу
  • Кращий контроль множинних процесів

Docker подхід:

Висновок

Systemd сервіси для Laravel Queue забезпечують:

  • Автоматичний запуск при завантаженні системи
  • Стійкість до збоїв через auto-restart
  • Централізоване логування
  • Простоте управління через systemctl
  • Інтеграцію з системою безпеки Linux

Для production середовища це найкращий спосіб забезпечити надійну роботу черг Laravel без додаткових залежностей типу Supervisor.

Швидкий checklist:

  1. Створити .service файл з правильними параметрами
  2. Встановити правильного користувача (www-data)
  3. Налаштувати restart policy
  4. Додати залежності (MySQL, Redis)
  5. Увімкнути автозапуск
  6. Налаштувати моніторинг через журнали
  7. Перевірити performance та ресурси

Systemd надає професійний рівень керування процесами для Laravel додатків у production.

Опубліковано в Laravel

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *