hakanispirli/laravel-shared-worker 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

hakanispirli/laravel-shared-worker

Composer 安装命令:

composer require hakanispirli/laravel-shared-worker

包简介

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

README 文档

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

hakanispirli/laravel-shared-worker 适用场景与选型建议

hakanispirli/laravel-shared-worker 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 4 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 01 月 25 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「queue」 「cron」 「laravel」 「worker」 「artisan」 「cpanel」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 hakanispirli/laravel-shared-worker 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 hakanispirli/laravel-shared-worker 我们能提供哪些服务?
定制开发 / 二次开发

基于 hakanispirli/laravel-shared-worker 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 4
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 28
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-25