Arka plan görevleri
5 dk okuma
Birkaç saniyeden uzun sürebilecek her şey, siz sayfada beklerken çalışmaz: arka planda, küçük partiler halinde çalışır; böylece büyük bir iş asla zaman aşımına uğramaz ve siteyi engellemez. Altyapı Action Scheduler olup eklentiyle birlikte gelir; WooCommerce ve birçok başka eklenti de onu kullanır. Bu eklentinin tüm işleri wpmcf Action Scheduler grubunu kullanır.
İki tür arka plan işi vardır:
Tür | Örnekler | Nerede görürsünüz |
|---|---|---|
Görevler (eklentinin görev tablosunda, çalıştırma günlüğü olan bir satır) | Programatik SEO üretimi, yapay zekâ ile zenginleştirme, sayfa dönüştürme, veri tablosu içe aktarmaları ve eşitlemeleri (Pro özellikleri) | Görevi oluşturan özelliğin ekranında |
Tekil işler | Şunlar: ACF taşıma sırasında değerlerin kopyalanması, büyük alan grubu tablo değişiklikleri, PHP ile kaydedilen alan gruplarının eşitlenmesi | İşi başlatan ekranda (örneğin taşımanın ilerleme çubuğunda) |
Ücretsiz eklentide ayrı bir Tasks ekranı yoktur: bir görev her zaman sahibi olan özellik tarafından gösterilir ve görevleri komut satırından listeleyebilirsiniz (wp wpmcf tasks list).
Bir çalıştırma nasıl işler
- İşi başlatırsınız (veya zamanlaması gelir). Eklenti bir Action Scheduler eylemi kuyruğa alır.
- WordPress eylemi çalıştırır. Her parti, bütçesi tükenene kadar çalışır: yaklaşık 20 saniye veya PHP bellek sınırının %80'i, hangisi önce dolarsa.
- İş kalmışsa sonraki parti hemen kuyruğa alınır. Çalıştırma bitene kadar partiler devam eder.
- Çalıştırma bittiğinde görev Completed olur; yinelenen bir görev ise bir sonraki çalıştırmasını bekler (bir dakikadan önce asla).
Her parti, bir öncekinin bıraktığı yerden devam eder; bu yüzden bir çökme ya da yeniden başlatma biten işi asla tekrarlamaz.
Kuyruğu ne başlatır. Yönetim panelinde bir düğmeye bastığınızda eklenti, Action Scheduler'dan isteğin hemen ardından başlamasını ister. Aksi halde partileri WP-Cron alır; site ziyaret aldığı sürece yaklaşık dakikada bir. Az trafikli sitelerde veya WP-Cron kapalıyken kuyruğu bir sistem cron işiyle çalıştırın (bkz. WP-CLI):
wp action-scheduler run --group=wpmcfGörev durumları
Durum | Anlamı |
|---|---|
Active | Şimdi veya planlanan bir sonraki zamanında çalışır. |
Paused | Yeniden etkinleştirilene kadar hiç çalışmaz. |
Completed | Tek seferlik bir görev bitti. |
Failed | Görev, art arda çok fazla başarısız denemeden sonra durdu. Yeniden etkinleştirmek sayacı sıfırlar. |
Her çalıştırma ayrıca günlük girişi bırakır: durum Processing, Completed veya Failed, bir mesaj ve bitiş zamanı. Bir görevin son 20 günlüğü saklanır.
Hatalar ve yeniden denemeler
Hata veren bir parti kaybolmaz:
Deneme | Ne olur |
|---|---|
1. başarısızlık | Görev Active kalır ve 1 dakika sonra yeniden dener. |
2. başarısızlık | Yeniden deneme: 2 dakika sonra. |
3. başarısızlık (varsayılan üst sınır) | Görev Failed olur; hata mesajı durumunda saklanır. |
Gecikme her denemede iki katına çıkar, en fazla bir saate kadar. Başarılı bir parti sayacı sıfırlar.
Başarısız bir görevi düzeltmek için nedeni giderin (mesaj neyin başarısız olduğunu söyler), ardından görevi özellik ekranından yeniden etkinleştirin veya wp wpmcf tasks run <id> ile çalıştırın.
Kilitler ve watchdog
- Bir görevin aynı anda yalnızca bir partisi çalışır. Çalışan bir parti 10 dakikaya kadar kilit tutar.
- Bir parti yarıda kesilirse (PHP fatal error, zaman aşımı veya bellek yetersizliği) devam partisi kuyruğa alınmaz. watchdog, her 15 dakikada bir çalışarak kuyruğa alınmış eylemi olmayan ve son partisi 15 dakikadan eski olan etkin görevleri bulur ve yeniden kuyruğa alır.
- Eklenti devre dışı bırakılıp yeniden etkinleştirildiğinde etkin görevler otomatik olarak yeniden kuyruğa alınır.
Duraklatma, sıfırlama ve silme
Eylem | Sonuç |
|---|---|
Pause | Kuyruktaki eylem kaldırılır ve durum Paused olur. Çalışan bir parti biter ve duraklatılmış durumu korur. |
Reset | İlerleme ve denemeler temizlenir. Etkin bir görev hemen baştan başlar. Özellik kendi çıktısını kaldırır. |
Delete | Görev, günlükleri ve kuyruktaki eylemi kaldırılır. Özellik, çalıştırmanın geride bıraktıklarını temizler. |
Bir görevin sahibi olan modül yoksa (örneğin Pro kodu kaldırılmışsa) görev korunur ama duraklatılır, böylece hiçbir şey rastgele başarısız olmaz. Kod geri geldiğinde ve görevi etkinleştirdiğinizde yeniden başlar.
ACF taşıma
ACF taşıma, görev tablosunu kullanmaz. Kendi durumu olan tek bir iştir:
Durum | Anlamı |
|---|---|
idle | Hiçbir şey çalıştırılmadı. |
running | Partiler kuyrukta veya çalışıyor. |
done | Bitti. |
cancelled | Şununla durduruldu: Cancel migration. |
Parti başına 50 nesne işler, aynı süre ve bellek bütçesi içinde. Bir parti 10 dakikalık kilit tutar. Kuyrukta bir şey yoksa ve beş dakikadır hiçbir şey ilerlemediyse Resume görünür. Ayrıntılar ACF'den taşıma sayfasındadır.
Bir şey takıldığında nereye bakmalı
- Özellik ekranı (Programatik SEO, Data tables veya Tools › Migrate from ACF): durum, son çalıştırma mesajı ve son hata.
- Tools › Scheduled Actions (WordPress'te, Action Scheduler'ın kendi listesi). Grubu
wpmcfve durumu Pending, In-progress, Failed olarak filtreleyin. Tarihi geçmiş Pending eylemler kuyruğun çalışmadığını gösterir: bkz. Kuyruğu ne başlatır. - WPM Fields › Settings › Health: bir iş çalışırken yakalanan hatalar. Bkz. Sağlık ve sorun giderme.
wp wpmcf tasks listher görev içinstatus,next_runveattemptsdeğerlerini gösterir.
Belirti | Olası neden | Ne yapmalı |
|---|---|---|
İlerleme çubuğu hareket etmiyor | WP-Cron kapalı veya sitenin ziyaretçisi yok | Şunu çalıştırın: |
Durum Failed | Art arda üç parti başarısız oldu | Mesajı okuyun, nedeni düzeltin, görevi yeniden etkinleştirin |
Durum Paused ve siz duraklatmadınız | Sahibi olan özellik kullanılamıyordu (örneğin Pro kaldırıldı veya lisans süresi doldu) | Özelliği geri getirin, ardından görevi etkinleştirin |
Bir çalıştırma sıfırdan başlıyor gibi görünüyor | Görev sıfırlandı veya veri kaynağı değiştirildi | Özelliğin günlüğünü kontrol edin |
Partiler yavaş | Kısa yürütme sınırı olan paylaşımlı hosting | Aşağıdaki filtreyle parti süresini düşürün |
Geliştiriciler için
Hook | Tür | Amaç |
|---|---|---|
| Action Scheduler hook'u | Bir görevin tek bir partisini çalıştırır (argüman: görev ID'si). |
| Action Scheduler hook'u | Yinelenen watchdog. |
| action | Bir çalıştırma bitti (görev ID'si, tür, durum). |
| action | Bir görev kalıcı olarak başarısız oldu (görev ID'si, tür, mesaj, görev). |
| action | Bir görev silindi (görev ID'si, tür, görev). |
| filter | Bir partinin saniye cinsinden süre bütçesi (varsayılan 20). |
// Shorter batches on a host with a 30 second execution limit.
add_filter( 'wpmcf/jobs/batch_seconds', fn () => 10 );Bir modül, görev türü için işleyicisini başlatma kodunda kaydeder; işleyici idempotent olmalıdır, çünkü bir parti çökmeden sonra yeniden denenebilir.
Hâlâ takıldınız mı? Destek ile iletişime geçin