Supervisor ile Laravel Queue Worker Yönetimi
Supervisor ile Laravel queue worker'ları yönetme: program.conf yapılandırması, çoklu process, öncelikli kuyruklar ve log yönetimi.
Supervisor Nedir?
Supervisor, Linux sistemlerde process yönetimi yapan bir istemci/sunucu sistemidir. Belirtilen process'lerin çalışıp çalışmadığını izler; process çöktüğünde otomatik olarak yeniden başlatır. Laravel uygulamalarında queue worker'ları (sıra işçileri) sürekli çalışır halde tutmak için vazgeçilmez bir araçtır.
Laravel Queue, e-posta gönderimi, resim işleme, bildirim gönderimi gibi zaman alıcı işleri asenkron olarak arka planda işler. php artisan queue:work komutu queue worker'ı başlatır, ancak terminal kapatıldığında veya sunucu yeniden başladığında durar. Supervisor bu süreci daemon olarak yönetir.
Supervisor Kurulumu
Ubuntu'da
sudo apt update
sudo apt install supervisor -y
sudo systemctl start supervisor
sudo systemctl enable supervisor
sudo systemctl status supervisor
AlmaLinux'ta
sudo dnf install supervisor -y
sudo systemctl start supervisord
sudo systemctl enable supervisord
Laravel Queue Worker için Program Yapılandırması
sudo nano /etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/myapp/artisan queue:work redis --sleep=3 --tries=3 --max-time=3600
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=4
redirect_stderr=true
stdout_logfile=/var/www/myapp/storage/logs/worker.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stopwaitsecs=3600
Parametre açıklamaları:
- numprocs=4: 4 paralel worker process başlatır
- --sleep=3: Kuyruk boşsa 3 saniye bekle
- --tries=3: Başarısız iş 3 kez tekrar denensin
- --max-time=3600: 1 saatte bir worker yeniden başlasın (bellek sızıntısı önleme)
- stopwaitsecs=3600: Durdururken işlemin bitmesini bekle
Supervisor Komutları
# Yapılandırmayı yeniden yükle
sudo supervisorctl reread
sudo supervisorctl update
# Worker'ları başlat
sudo supervisorctl start laravel-worker:*
# Worker'ları durdur
sudo supervisorctl stop laravel-worker:*
# Worker'ları yeniden başlat (deploy sonrası)
sudo supervisorctl restart laravel-worker:*
# Tüm process'lerin durumunu gör
sudo supervisorctl status
# Supervisor'u yeniden yükle
sudo supervisorctl reload
Laravel .env Yapılandırması
QUEUE_CONNECTION=redis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD=null
Farklı Kuyruklar için Ayrı Worker'lar
sudo nano /etc/supervisor/conf.d/laravel-worker.conf
# Yüksek öncelikli kuyruk (email gönderimi)
[program:laravel-worker-high]
command=php /var/www/myapp/artisan queue:work redis --queue=high --sleep=1 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=2
stdout_logfile=/var/www/myapp/storage/logs/worker-high.log
# Normal öncelikli kuyruk
[program:laravel-worker-default]
command=php /var/www/myapp/artisan queue:work redis --queue=default --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=2
stdout_logfile=/var/www/myapp/storage/logs/worker-default.log
# Düşük öncelikli kuyruk (rapor oluşturma)
[program:laravel-worker-low]
command=php /var/www/myapp/artisan queue:work redis --queue=low --sleep=5 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=1
stdout_logfile=/var/www/myapp/storage/logs/worker-low.log
Laravel Horizon ile Alternatif Yönetim
Sadece Redis kullananlar için Horizon, queue worker'ları daha gelişmiş arayüzde yönetir:
composer require laravel/horizon
php artisan horizon:install
php artisan horizon:publish
sudo nano /etc/supervisor/conf.d/laravel-horizon.conf
[program:laravel-horizon]
process_name=%(program_name)s
command=php /var/www/myapp/artisan horizon
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/myapp/storage/logs/horizon.log
stopwaitsecs=3600
Deploy Sonrası Queue Yenileme
# Artisan komutu ile mevcut worker'ları nazikçe yenile
php /var/www/myapp/artisan queue:restart
# Supervisor ile worker'ları yeniden başlat
sudo supervisorctl restart laravel-worker:*
Log İzleme
sudo tail -f /var/www/myapp/storage/logs/worker.log
sudo supervisorctl tail -f laravel-worker:laravel-worker_00
Başarısız İşleri Yönetme
# Başarısız işleri listele
php artisan queue:failed
# Başarısız işleri yeniden dene
php artisan queue:retry all
# Belirli bir işi yeniden dene
php artisan queue:retry JOB_ID
# Başarısız kuyruğu temizle
php artisan queue:flush
Sık Karşılaşılan Sorunlar
Worker Başlamıyor
sudo supervisorctl status
sudo supervisorctl tail laravel-worker:laravel-worker_00 stderr
Bellek Sızıntısı - Worker Büyüyor
# --max-jobs veya --max-time parametresi ekleyin:
command=php artisan queue:work --max-jobs=500 --max-time=3600
Sonuç
Supervisor ile Laravel queue worker'larınızı güvenilir biçimde yönetiyorsunuz. Birden fazla worker process, öncelikli kuyruk yapılandırması ve otomatik yeniden başlatma ile yüksek hacimli arka plan görevlerinizi sorunsuzca işleyebilirsiniz.
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!