hakanispirli/laravel-shared-worker

Production-ready Laravel Queue Worker optimized for shared hosting environments - No SSH, No proc_open required

Maintainers

Package info

github.com/hakanispirli/laravel-shared-worker

pkg:composer/hakanispirli/laravel-shared-worker

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-01-25 07:40 UTC

This package is auto-updated.

Last update: 2026-03-25 08:15:29 UTC


README

Paylaşımlı (shared) hosting ortamları için geliştirilmiş Laravel Queue Worker paketi.

Bu paket, proc_open, pcntl_signal, symlink gibi fonksiyonların kapalı olduğu sunucularda Laravel Queue sistemini sorunsuz çalıştırır.

Problem

Paylaşımlı sunucularda standart php artisan queue:work komutu çalışmaz çünkü:

  1. proc_open fonksiyonu güvenlik nedeniyle kapalıdır
  2. SSH erişimi genellikle yoktur
  3. Uzun çalışan process'ler otomatik sonlandırılır

Bu paket, bu kısıtlamaları aşarak queue sistemini cron job ile çalıştırmanızı sağlar.

Kurulum

composer require hakanispirli/laravel-shared-worker

Config dosyasını yayınlamak için (opsiyonel):

php artisan vendor:publish --tag=shared-worker-config

Yapılandırma

1. Queue Driver Ayarı

.env dosyasında:

QUEUE_CONNECTION=database

Jobs tablosu yoksa oluşturun:

php artisan queue:table
php artisan migrate

2. Schedule Tanımlaması

Laravel 11 ve üzeri - routes/console.php:

use Illuminate\Support\Facades\Schedule;

Schedule::command('queue:shared-worker --max-time=55 --memory=128')
    ->everyMinute();

Laravel 10 ve altı - app/Console/Kernel.php:

protected function schedule(Schedule $schedule)
{
    $schedule->command('queue:shared-worker --max-time=55 --memory=128')
        ->everyMinute();
}

3. cPanel Cron Job

cPanel kontrol panelinde Cron Jobs bölümüne gidin ve her dakika çalışacak şekilde ekleyin:

* * * * * /usr/local/bin/php /home/KULLANICI/public_html/artisan schedule:run >> /dev/null 2>&1

Not: PHP yolu sunucunuza göre değişebilir. Hosting firmanızdan öğrenebilirsiniz.

Parametreler

Parametre Varsayılan Açıklama
--max-time 55 Maksimum çalışma süresi (saniye)
--memory 128 Maksimum RAM kullanımı (MB)
--sleep 3 Kuyruk boşken bekleme süresi (saniye)
--queue default İşlenecek kuyruk adı
--connection database Queue connection
--tries 3 Maksimum deneme sayısı
--force - Bakım modunda çalıştır

Ortam Değişkenleri

Tüm ayarlar .env dosyasından özelleştirilebilir:

SHARED_WORKER_MAX_TIME=55
SHARED_WORKER_MEMORY=128
SHARED_WORKER_SLEEP=3
SHARED_WORKER_TRIES=3
SHARED_WORKER_LOCK=file
SHARED_WORKER_QUEUE=default
SHARED_WORKER_CONNECTION=database

Mail Gönderimi

Queue üzerinden mail göndermek için:

use HakanIspirli\SharedWorker\Jobs\MailJob;
use App\Mail\WelcomeMail;

// Mail'i queue'ya ekle
MailJob::dispatch(new WelcomeMail($user), $user->email);

// Belirli bir queue'ya ekle
MailJob::dispatch(new WelcomeMail($user), $user->email, 'emails');

Lock Mekanizması

Paket, aynı anda birden fazla worker çalışmasını engeller. Üç farklı yöntem desteklenir:

  • file - Varsayılan. storage/framework klasörünü kullanır.
  • database - Cache tablosunu kullanır.
  • cache - Laravel cache sistemini kullanır.
SHARED_WORKER_LOCK=file

Çalışma Mantığı

Cron (her dakika)
    |
    v
schedule:run
    |
    v
queue:shared-worker
    |
    v
Lock kontrolü --> Başka worker var mı? --> Evet --> Çık
    |
    Hayır
    v
Job al --> İşle --> Başarılı --> Sil
    |
    Başarısız
    v
Deneme hakkı var mı? --> Evet --> Tekrar kuyruğa ekle
    |
    Hayır
    v
failed_jobs tablosuna yaz
    |
    v
Süre/Memory kontrolü --> Limit aşıldı mı? --> Evet --> Çık
    |
    Hayır
    v
Tekrar başa dön

Örnek Job

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class SendNotification implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public function __construct(
        public string $message
    ) {}

    public function handle(): void
    {
        // İşlem kodları
    }
}

Job'u çalıştırmak için:

SendNotification::dispatch('Merhaba!');

Sorun Giderme

Worker çalışmıyor

  1. Komutu manuel çalıştırın: php artisan queue:shared-worker
  2. Log dosyasını kontrol edin: storage/logs/laravel.log
  3. Jobs tablosunu kontrol edin: SELECT * FROM jobs

Overlapping sorunu

Lock dosyalarını temizleyin:

rm -rf storage/framework/shared-worker-locks/*

Job'lar işlenmiyor

  1. .env dosyasında QUEUE_CONNECTION=database olduğundan emin olun
  2. jobs tablosunun var olduğunu kontrol edin
  3. failed_jobs tablosunu kontrol edin

Lisans

MIT License

Geliştirici

Hakan İspirli - destek@webmarka.com