# Görev Yönetimi Kancaları

https://dev.wisecp.com/tr/gorev-yonetimi-kancalari

Operatörün zamanlanmış görevlere elle müdahale ettiği sekiz kanca: elle çalıştırma, açıp kapatma, kuyruk temizliği ve acil durdurma.

## Genel Bakış

Önceki makaledeki kancaların aksine bunlar **panelden** başlar: karşıda bir operatör vardır ve mesajınızı okur.

İkisi özellikle ağırdır. Acil durdurma **bütün otomasyonu** kapatır; kuyruk temizliği ise **geçmişi siler** ve neyin ne zaman koştuğunu bir daha göremezsiniz.

## Referans

### Elle çalıştırmayı izleme

actioncron.task_run_now

`AdminAutomation` iş kuyruğa girdi

Operatör bir görevi elle tetikledikten sonra çalışır. Görev bu noktada **kuyruğa girmiştir**, henüz koşmamıştır.

Parametreler 2

$taskstringTetiklenen görevin adı.

$job_idintKuyruğa atılan işin kimliği. İşin sonucu için kuyruk kancasını dinleyin; bu kanca yalnız **sıraya girdiğini** söyler.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:cron.task_run_now', 10, function ($task, $job_id) {
    // Is KUYRUGA girdi, henuz kosmadi: sonuc icin job.processed kancasina bakin.
    Audit::manualRun($task, (int) $job_id);
});
```

### Görevin açılıp kapanmasını izleme

actioncron.task_status_changed

`AdminAutomation` tek görev

Tek bir görev etkinleştirilip pasifleştirildikten sonra çalışır.

Parametreler 2

$taskstringDurumu değişen görevin adı.

$enabledboolYeni durum. Kapatılan görev **sessizce durur**: kimse fark etmeyebilir.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:cron.task_status_changed', 10, function ($task, $enabled) {
    // Kapatilan gorev sessizce durur: kritik olanlari kayda gecirin.
    if (!$enabled && Acme::criticalTask($task)) Ops::alert('task-off', $task);
});
```

### Acil durdurmayı engelleme

gatecron.kill_switch_disable

`AdminAutomation` her şeyi durdurur

Bütün otomasyon kapatılmadan önce çalışır. Bu kanca **yalnız kapatma yönünde** çalışır.

Parametreler 2

$enabledboolHedef durum. Bu kancada **her zaman yanlıştır**: yalnız kapatmada çalışır, açmada değil.

$pending_countintŞu an bekleyen iş sayısı. Yüksekse kapatmak birikmiş işleri **bekletir**; karar verirken buna bakın.

Dönüş 1

stringBoş olmayan bir string işlemi **durdurur**; metin operatöre hata olarak gösterilir.

Dinleyici PHP

```php
Hook::add('gate:cron.kill_switch_disable', 10, function ($enabled, $pending_count) {
    // Bekleyen is cok iken kapatmak birikmeyi buyutur.
    if ($pending_count > 500)
        return 'Bekleyen is sayisi yuksek; once kuyrugun bosalmasini bekleyin.';

    return null;
});
```

### Kuyruk temizliğini durdurma

gatecron.cleanup_run

`AdminAutomation` geçmişi siler

Kuyruk geçmişi silinmeden önce çalışır. Saklama süreleri **duruma göre ayrıdır**.

Parametreler 3

$completed_daysintTamamlanan işlerin saklama günü.

$cancelled_daysintİptal edilen işlerin saklama günü.

$failed_daysintBaşarısız işlerin saklama günü. Bu değeri düşük tutmak, sorunun **kanıtını** silmek demektir.

Dönüş 1

stringBoş olmayan bir string işlemi **durdurur**; metin operatöre hata olarak gösterilir.

Dinleyici PHP

```php
Hook::add('gate:cron.cleanup_run', 10,
    function ($completed_days, $cancelled_days, $failed_days) {
        // Basarisiz isleri erken silmek sorunun kanitini yok eder.
        if ($failed_days < 30) return 'Basarisiz kayitlar en az 30 gun saklanmalidir.';

        return null;
    });
```

### Temizliğin sonucunu izleme

actioncron.queue_cleaned

`AdminAutomation` duruma göre dağılım

Kuyruk temizliği bittikten sonra çalışır.

Parametreler 2

$deletedintSilinen toplam kayıt.

$breakdownarrayDuruma göre dağılım: tamamlanan, iptal edilen, başarısız. Başarısız sayısı yüksekse **silinen şey bir sorunun izidir**.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:cron.queue_cleaned', 10, function ($deleted, $breakdown) {
    // Silinen basarisiz kayit cok ise bir sorunun izi gitmis demektir.
    if ((int) ($breakdown['failed'] ?? 0) > 100)
        Ops::warn('cron-failures-purged', (int) $breakdown['failed']);
});
```

### İşe müdahaleyi izleme

actioncron.job_intervened

`AdminAutomation` dört ayrı işlem

Operatör kuyruktaki bir işe elle müdahale ettikten sonra çalışır.

Parametreler 3

$actionstringMüdahale türü: `retry`, `cancel`, `force_reclaim`, `delete`. Dördü çok farklı şeydir; türü okumadan tepki vermeyin.

$queuestringKuyruk anahtarı: `cron`, `module`, `notification`. Üç ayrı kuyruk vardır; hepsi bu kancadan geçer.

$idintMüdahale edilen işin kimliği.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:cron.job_intervened', 10, function ($action, $queue, $id) {
    // force_reclaim, takilmis bir isi geri alir: bu tekrar calismasi demektir.
    if ($action === 'force_reclaim') Ops::note('job-reclaimed', $queue, (int) $id);
});
```

### Kesinti sonrası dönüşü yakalama

actioncron.restore.detected

`cron.php` uzun boşluk

Sistem, görevlerin uzun süre koşmadığını fark ettiğinde çalışır.

Parametreler 2

$restoreInfoarrayKesinti bilgisi: `gap_hours`, `gap_seconds`, `last_seen`. Boşluk uzunsa bu süredeki **yenilemeler, askıya almalar ve faturalar** gecikmiş demektir.

$workerIdstringTespiti yapan işçinin kimliği.

Dönüş 1

voidDönüş yoksayılır.

Dinleyici PHP

```php
Hook::add('action:cron.restore.detected', 10, function ($restoreInfo, $workerId) {
    // Bosluk boyunca yenileme ve askiya alma gecikti: birikmeyi kontrol edin.
    Ops::alert('cron-gap', (float) ($restoreInfo['gap_hours'] ?? 0));
});
```

### Görev listesini değiştirme

filtercron.task_overview

`AdminAutomation` panel kartları

Görev özeti panelde gösterilmeden önce çalışır.

Parametreler 1

$tasksarrayrefGörev kartı satırları. Kendi görevinizi buraya eklemek onu **listede gösterir**, ama çalıştırmaz: çalıştırmak için kayıt kancasını kullanın.

Dönüş 1

voidDeğer **referansla** değişir; dönüş kullanılmaz.

Dinleyici PHP

```php
Hook::add('filter:cron.task_overview', 10, function (&$tasks) {
    // Listeye eklemek gorevi CALISTIRMAZ; kayit register:cronjobs ile yapilir.
    $tasks = array_filter($tasks, fn ($t) => !Acme::hidden($t['key'] ?? ''));
});
```

## Tuzaklar

> **Elle çalıştırmak koşturmak değildir**
> 
> Elle başlatma kancası size **kuyruk kimliği** verir: iş sıraya girmiştir, henüz koşmamıştır. Sonucu burada beklemek boşunadır; işin gerçekten ne yaptığını **işlendi kancası** söyler.

> **Temizlik geçmişi geri gelmez**
> 
> Kuyruk temizliği **başarısız** kayıtları da siler ve o kayıtlar bir sorunun tek izidir. Saklama sürelerini kısaltmak, ertesi gün "neden çalışmamış?" sorusunu **cevapsız** bırakır. Kapıda başarısız kayıtların süresini koruyun.

> **Müdahale kancası dört farklı işi taşır**
> 
> Yeniden deneme, iptal, geri alma ve silme **aynı kancadan** geçer ve sonuçları taban tabana zıttır. Türü okumadan yazılan bir dinleyici, iptal edilen bir işi **yeniden başlatılmış** sanabilir. Ayrıca üç ayrı kuyruk vardır; ikinci parametre hangisinde olduğunuzu söyler.

> **Listeye eklemek görevi çalıştırmaz**
> 
> Görev listesi filtresi yalnız **panelde görüneni** değiştirir. Kendi göreviniz oraya eklendiği için çalışmaz; çalışması için **kayıt kancasıyla** tanıtılması gerekir. İkisini karıştırmak, panelde duran ama hiç koşmayan bir kart bırakır.

## İlgili Makaleler

- [Cron Tur Kancaları](https://dev.wisecp.com/tr/cron-tur-kancalari)
- Zamanlanmış Görev Kancaları
- [Yönetim Paneli Kancaları](https://dev.wisecp.com/tr/yonetim-paneli-kancalari)
