Cron Tur Kancaları
Kimsenin başında olmadığı işlerin kancaları: tur başlangıcı, görev kaydı, kuyruk, dakikalıktan aylığa periyodik turlar ve işçi yönetimi.
Genel Bakış
Zamanlanmış görevler bir tur hâlinde çalışır: sistem dakikada bir uyanır, kuyruktaki işleri alır, gerekirse yardımcı işçiler açar ve biter.
Buradaki kancaların hepsinde ortak bir gerçek vardır: ekranda kimse yoktur. Fırlattığınız hata kimseye gösterilmez, yazdığınız çıktı kimseye ulaşmaz; tek izi kayıtlarda kalır.
Referans
Kendi zamanlanmış görevinizi kaydetme
Görev kayıtları toplanırken çalışır. Kendi görevinizi burada kaydedersiniz.
CronJobQueue::register() çağrısıyla yapılır.Hook::add('register:cronjobs', 10, function () {
// Kayit DONUSLE degil, cagriyla yapilir.
CronJobQueue::register('acme.sync', AcmeSyncHandler::class);
});Turun çalışmasını durdurma
Tur başlamadan önce çalışır. Durdurmak, o turda hiçbir işin işlenmemesi demektir.
Hook::add('gate:cron.worker.run', 10, function ($isCli, $sapi) {
// Bakim penceresinde hicbir gorev calismasin.
if (Acme::maintenanceWindow()) return 'bakim penceresi';
return null;
});Turun başladığını izleme
Tur başladığında çalışır.
Hook::add('action:cron.tick.started', 10, function ($workerId, $isChild, $startTs) {
// Yardimci isciler de bu kancayi calistirir: ikisini ayirin.
if ($isChild) return;
Ops::heartbeat($workerId, $startTs);
});Turun bittiğini izleme
Tur bittikten sonra çalışır.
status (ok ya da partial), işçi kimliği, işlenen iş sayısı, süre, hatalar, zamanlayıcı ve yardımcı bilgisi. partial demek turun işini bitiremediği demektir.Hook::add('action:cron.tick.completed', 10, function ($payload, $isChild) {
// partial = tur isini bitiremedi; ust uste gorulurse kapasite sorunudur.
if (($payload['status'] ?? '') === 'partial')
Ops::warn('cron-partial', (int) ($payload['processed'] ?? 0));
});İşlenen işi izleme
Kuyruktaki bir iş işlendikten sonra çalışır.
Hook::add('action:cron.job.processed', 10, function ($job, $workerId) {
// Deneme sayisi > 1 ise bu is daha once dusmus demektir.
if ((int) ($job['attempts'] ?? 0) > 1)
Ops::note('cron-retry', $job['type'] ?? '', (int) $job['attempts']);
});Günlük işe katılma
Günlük görev turunda çalışır. Diğer kancaların aksine dönüşünüz kaydedilir.
Hook::add('action:cron.day.run', 10, function () {
// Donusunuz panelde gorunur: basarili ise true, degilse aciklama dondurun.
$done = Acme::nightlyReport();
return $done ? true : ['status' => false, 'message' => 'rapor uretilemedi'];
});Saatlik işe katılma
Saatte bir çalışır. Kendi görev dosyanızı açmak yerine saatlik işi buraya bağlarsınız: önbellek temizliği, saatlik özet, dış sistemle eşitleme.
Hook::add('action:cron.hour.run', 10, function () {
$n = Acme::syncPartnerCatalog();
return ['status' => true, 'message' => $n . ' kayit esitlendi'];
});Dakikalık işe katılma
Her dakika çalışır, turların en sıkışığı. Kuyruk boşaltma, dış sorgulama ve sağlık kontrolü için kullanın.
Hook::add('action:cron.minute.run', 10, function () {
// Kisa tutun: bu blok her dakika calisir.
$sent = Acme::drainOutbox(50);
return ['status' => true, 'message' => $sent . ' mesaj gonderildi'];
});Aylık işe katılma
Ayda bir çalışır: ay sonu özetleri, mutabakat, arşivleme.
Hook::add('action:cron.month.run', 10, function () {
$rows = Acme::archiveLastMonth();
return ['status' => true, 'message' => $rows . ' satir arsivlendi'];
});Yardımcı işçi sayısını değiştirme
Yoğunluk nedeniyle kaç yardımcı işçi açılacağına karar verildikten sonra çalışır.
count (açılacak sayı), bekleyen iş, etkin işçi, eşik, üst sınır, gerekçe. Etkili olan alan count; diğerleri kararı anlamanız içindir.Hook::add('filter:cron.spawn.count', 10, function (&$decision) {
// Yalniz count etkilidir; sunucu yuku yuksekken yardimci acmayin.
if (Acme::loadHigh()) $decision['count'] = 0;
});Pano grafiği görev listesini değiştirme
Otomasyon panosundaki etkinlik grafiğinin görev seçicisi hazırlanırken çalışır. Kendi görev tipinizi listeye ekleyebilir, dahili olanları gizleyebilirsiniz.
Hook::add('filter:cron.dashboard_chart_tasks', 10, function (&$options) {
// Kendi gorevinizi listeye ekleyin.
$options['acme-sync'] = 'Acme esitleme';
// Dahili olani gizleyin.
unset($options['queue-cleanup']);
});Elle çalıştırmayı durdurma
Operatör bir görevi elle çalıştırmadan önce çalışır.
Hook::add('gate:cron.task_run_now', 10, function ($task, $user_id) {
// Panelden tetiklenir: mesajinizi okuyan bir insan var.
if ($task === 'invoice.generate' && Acme::billingFrozen())
return 'Faturalama donduruldu; bu gorev simdi calistirilamaz.';
return null;
});Acil durdurmayı izleme
Zamanlanmış görevlerin tamamı açılıp kapatıldığında çalışır.
Hook::add('action:cron.kill_switch_toggled', 10, function ($enabled, $user_id) {
// Kapatmak butun otomasyonu durdurur: unutulursa fatura bile kesilmez.
if (!$enabled) Ops::alert('cron-disabled', (int) $user_id);
});Tuzaklar
Zamanlanmış görev kancalarında ekranda kimse yoktur. Fırlattığınız hata müşteriye de operatöre de gösterilmez; yalnız kayıtlara düşer. Bir şeyin yanlış gittiğini duyurmak istiyorsanız bunu kendiniz yapın: bildirim, kayıt ya da uyarı.
Yoğunluk arttığında sistem yardımcı işçiler açar ve her biri tur kancalarını çalıştırır. "Tur başladı" kancasına bildirim yazarsanız yoğun bir dakikada onlarca bildirim gider. İkinci parametredeki yardımcı işaretini okuyun.
Düşen bir iş yeniden denenir ve işlendi kancası her denemede çalışır. Deneme sayısını okumadan tepki veren bir dinleyici, tek bir iş için art arda kayıt ya da bildirim üretir. Sayacı ilk satırda kontrol edin.
Periyodik iş kancaları, diğer olay kancalarının aksine dönüşünüzü toplar ve panelde başarı, süre, hata olarak gösterir. Hiçbir şey döndürmemek kaydınızı "belirsiz" bırakır. Başarıda doğru, başarısızlıkta açıklamalı bir dizi dönün.
İlgili Makaleler
- Zamanlanmış Görev Kancaları
- Hizmet Durum Kancaları
- Fatura Yaşam Döngüsü Kancaları
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.