Laravel kuyrukları canlıda nasıl ayakta tutulur? Supervisor rehberi
Yerelde sorunsuz çalışan kuyruklar canlıya çıkınca neden durur? Queue worker'ları Supervisor ile yönetmenin ve sık yapılan hataların kısa rehberi.
E-posta gönderimi, bildirimler, dış servis istekleri, rapor üretimi… Kullanıcıyı bekletmemesi gereken her iş için Laravel kuyrukları harika bir araçtır. Ancak yerelde php artisan queue:work ile çalışan kuyruk, canlı sunucuda terminal kapanınca durur.
Supervisor neden gerekli?
Supervisor, bir süreci arka planda sürekli çalışır halde tutan ve çökerse yeniden başlatan bir süreç yöneticisidir. Ubuntu üzerinde kurulumu basittir:
sudo apt install supervisor
Ardından /etc/supervisor/conf.d/laravel-worker.conf dosyası oluşturulur:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/proje/artisan queue:work --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
user=www-data
numprocs=2
redirect_stderr=true
stdout_logfile=/var/www/proje/storage/logs/worker.log
stopwaitsecs=3600
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start "laravel-worker:*"
En sık yapılan hata: deploy sonrası eski kod
Queue worker uzun süre çalışan bir süreçtir ve uygulamayı belleğe bir kez yükler. Yeni kod yayına alındığında worker eski kodla çalışmaya devam eder. Bu yüzden her deploy sonrasında şu komut çalıştırılmalıdır:
php artisan queue:restart
Diğer kontrol listesi
- Scheduler için cron:
* * * * * php /var/www/proje/artisan schedule:runsatırı eklenmemişse zamanlanmış görevler hiç çalışmaz. - Başarısız işler:
failed_jobstablosunu düzenli izleyin;queue:retryile yeniden deneyebilirsiniz. - Zaman aşımları: Uzun süren işlerde
--timeoutdeğerinin, kuyruk bağlantısındakiretry_afterdeğerinden küçük olması gerekir. - Loglar: Sorun çıktığında ilk bakılacak yer worker log dosyası ve
storage/logsklasörüdür.
Doğru kurulmuş bir kuyruk altyapısı, uygulamanın hem hızlı hem de güvenilir hissettirmesinin görünmeyen kahramanıdır.
Benzer bir projeniz mi var?
Fikrinizi konuşalım, size en uygun yol haritasını çıkaralım.