WP_CRON'u devre dışı bırakmalı ve bunun yerine wp-cron.php dosyasını birkaç dakikada bir tetiklemeli miyim?


13

WordPress, her sayfa yüklemesinde gereksiz yere WP CRON'u ateşliyor gibi görünüyor. Bence, her ziyarette çalıştırmak yerine, neden sadece her 5 dakikada bir sunucu üzerinden çalışacak şekilde zamanlamıyorsunuz? Her beş dakikada bir wp-cron.php'yi tetikleyebilir ve istenen sonucu elde edebilir miyim?

Bunun bir dezavantajı var mı?

Yanıtlar:


16

Sunucunun cron işlerini kullanarak WP CRON'u çalıştırmanın bir dezavantajı yoktur. Aslında önerilen uygulama budur.

Göre Resmi WordPress Geliştirme Belgesi :

WP-Cron sürekli çalışmaz, bu da zamanında çalışması gereken kritik görevler varsa bir sorun olabilir. Bunun için kolay bir çözüm var. Sisteminizin görev zamanlayıcısını istediğiniz aralıklarla (veya belirli bir zamanda) çalışacak şekilde ayarlayın.

Bunu yapmak için, önce varsayılan cron davranışını devre dışı bırakmanız gerekir wp-config.php:

define('DISABLE_WP_CRON', true);

Sonra wp-cron.phpsunucunuzdan zamanlama . Linux için bu şu anlama gelir:

crontab -e

Ancak, bunu Komut Satırı'nda (CLI) çalıştırmak yerine, HTTP isteği olarak çalıştırın. Bunun için şunları kullanabilirsiniz wget:

*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron

WordPress gerekli tüm çekirdek dosyaları, Eklentileri vb. wp-cron.phpAşağıdaki KOD ile yükler :

if ( !defined('ABSPATH') ) {
    /** Set up WordPress environment */
    require_once( dirname( __FILE__ ) . '/wp-load.php' );
}

Bu yüzden WordPress'in önemli özellikleri yüklememesi konusunda endişelenmeyin.


1
Bahsettiğiniz WordPress.org belgelerine wget http://YOUR_SITE_URL/wp-cron.phpek olarak bahsetmeden ?doing_wp_cron biri diğerinden daha iyi mi? ?doing_wp_cronVersiyon olmayanların eklenmesi ne yapar ?
Garconis

Muhtemelen sadece günlükleriniz sorgu dizesini gösterecek, böylece kesin olarak nasıl çağrıldığını bileceksiniz.
Slbox

1
Buna hiç katılmıyorum. Her şeyden önce, "tavsiye" olduğu doğru değil. İkinci olarak, bu yöntem, olayları planlamak için önerilen gerçek yöntemi kullanan tüm eklentileri saklayacaktır. Bence bu gerçekten kötü bir tavsiye. Bunu yapmak için ÇOK özel bir nedeniniz yoksa neredeyse hiç kimse cron'u kapatmamalıdır. Düşünebilmemin tek nedeni, WordPress'i bir CDN veya başka bir şey için ayırmanızdır. Bu normal bir uygulama DEĞİLDİR.
John Dee

2
@JohnDee: Bu yöntem aslında cron'u devre dışı bırakmaz, her sayfa yüklemesinde cron işlerini kontrol eden ve çalıştırmaya çalışan WP Cron yöntemini devre dışı bırakır. define('DISABLE_WP_CRON', true);cron işleminin yalnızca o kısmını devre dışı bırakır ve cron betiğini şu kodla çağırır: */5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cronsunucuda cron işlerinin yürütülmesini sağlar. Herhangi bir zamanlama Eklentisi farkı bile bilemez.
Fayaz

1
Bu konuyla ilgili WordPress.org dokümantasyon bağlantısı developer.wordpress.org/plugins/cron/… olarak
aldemarcalazans

2

Birkaç olumsuz tarafı vardır: Birincisi, wp-cron.php dosyası $ _SERVER değişkenleri gibi bir cli olarak kullanıldığında ayarlanmaz. İnsanlar wp-cron.php'ye kıvrılma isteği kullanarak bu sınırlamanın üstesinden gelirler.

İkincisi, WP'nin kendisi wp-cron.php ile yüklü olmadığından; SMTP posta eklentisi kullanıyorsanız, wp-cron çağrılırken bu yüklenmez. Yine, bir kıvrılma çağrısı kullanmak bu sorunu geçersiz kılar. Curl en sık kullanılan yöntem gibi görünmektedir.

Ancak; Postfix ve (nginx için) php-fpm yapılandırmasında posta ayarlarını doğru bir şekilde yaptıktan ve aşağıdaki gibi bir crontab ayarladıktan sonra wp-cli kullanmayı tercih ederim

*/5    *   *   *   *  wp cron event list --skip-plugins --skip-themes --path="/var/www/vhosts/example.com/httpdocs/wp" --fields=hook,next_run_relative --format=csv | awk -F, '$2=="now" {print $1}' | xargs -r wp --path="/var/www/vhosts/example.com/httpdocs/wp" cron event run $1

(Belirli alanlara sahip tüm crons'ları csv biçiminde listeleyin - kanca, cronun adıdır, sonraki çalıştırma göreceli zamandır. AWK kullanarak bir sonraki çalıştırmada (şimdi vadesi gelecek olanlar) 'şimdi' gösterenleri çıkarın, bu listeyi xargs'a iletin çağrı wp cron event run $HOOKolarak değil, xargs ile cron'u çalıştırırken onları atlamak için değil;. kod Standardizasyon ve Kalibrasyon olarak, doğru (I crons listelenirken eklentileri atlamayı tercih WordPress wp-cli yükleri kullanarak) her cron ve php uyarıları metne çıktı berbat edecek cron'un eklentilerin yüklenmesi gerekebilir)

Umarım bu nelere dikkat etmeniz gerektiğine dair bazı işaretler verir.


2
Kurulum hakkında: / 15 * * * wget -q -O - alan_adiniz.com/wp-cron.php?doing_wp_cron , TomMcFarlin tarafından önerilen şekilde - tommcfarlin.com/wordpress-cron-jobs . İşi iyi yapıyor gibi görünüyor. Yorumunuz için teşekkür ederiz.
TheBigK

Evet, insanlar boyunca bahsettiğim gibi, crons'ı tetiklemek için kıvırmayı (wget veya başka bir http çağrısı) kullanmayı seçiyor ve bu yöntemde yanlış bir şey yok. Ben sadece gerekli dosyaları içermez doğrudan wp-cron php dosyasını çağıran sorunları tavsiye ve biraz baharatlı istiyorsanız başka bir alternatif yöntem tavsiye.
TechnicalChaos

0

Wp-cron'u devre dışı bırakmamanın birçok nedeni vardır. Aslında, bunu yapmak için bir kullanım durumu bulmak neredeyse imkansızdır. Sitenizi yavaşlatmaz ve farkında olmadığınız şeyler için kullanılır.

Birçok eklenti, işleri planlamak için WP-Cron'u kullanır. Zamanlayıcıyı kapatırsanız kafanız karışabilir.

Kafa karıştırıcı olduğu ve devre dışı bıraktığınızda sitenize fazla bir şey yapmadığı için bu konuda öğreticilerin çoğalması var. Yapacağı şey, altı ay içinde yarattığı gizemli sorunu düzeltmek zorunda olan geliştiriciye baş ağrısına neden olmak.

Ayrıca, WP Heartbeat, yönetici alanında her 15 saniyede bir çalışır ve bu sorunu sahip olduklarını düşünenlerin% 99'u için çözer.


2
Bu korkunç bir yanıttır - WOT Cron'u -NOT- devre dışı bırakırlar. Yalnızca sayfa yüklemesinde WP Cron'un çağrılmasını devre dışı bırakırlar ve bunun yerine sistem cronu arka plan programına boşaltırlar. Sheesh.
Barry Chapman

Her neyse, onu yalnız bırakmanın ana nedeni, birçok eklentinin artık genişletilmiş arka plan görevi için cron'u kullanmasıdır. SONRAKİ kişinin yaptığı bir şeyi dağıtabilirsiniz, çünkü sistemin standart bir şekilde çalışmasını beklerler. İyi şanslar!
John Dee

1
bir eklenti, wp cron devre dışı bırakıldığında tamamen kırılacak şekilde kodlanırsa, bu, yetersiz bir program tarafından programlandığı anlamına gelir ve hemen kaldırmak daha iyidir.
Magnetic_dud

Buradaki iki yorum benim fikrimi kanıtlıyor. "Bu, cron'u mearly OS cron'a karıştırıyor" diyen bir geliştiriciniz var - bu, OS nötr olan WordPress'de bir ara. Sonra başka bir geliştirici "hey, wp cron imha için planlamak eklenti dev'in sorumluluğundadır." Ah tamam. Eğer cron işlevselliği istiyorsanız, cron sisteminin ortadan kaldırılması için PLANALMALISINIZ? Neye? Yedek cron sistemi? Bu yorum bir anlam ifade etmiyor.
John Dee

Her neyse, mevcut durum "TOPLAM KONFÜZYON" dur. Şu anki durum bu. Bir çerçeve POV'den tek çözüm insanlara şunu söylemek: WP-CRON SİSTEMİ VAR NEDİR. KAPATMAYIN. Diğer seçenek 10.000 farklı, çeşitli görüştür. Şimdi sahip olduğumuz şey bu.
John Dee

0

Ben wp-cron dış hizmet boşaltma için gerçek bir dezavantaj bulmak için henüz. Bunu yıllardır yapıyor olmak.

Özellikle günümüz dünyasında uygulamaları mikro hizmet olarak çalıştırabileceğiniz.

Her WordPress bileşeni için ayrı Docker kapları kullanıyorum - php, web, db, crontab, redis ve benzeri). Ayrı bir kapsayıcı olarak crontab olması, yerel ağ kullanarak http üzerinden wp-cron çağırması, yalnızca ihtiyacım olduğunda çalışıyor.

Bu, arka uç düğümlerindeki stresi azaltır ve daha küçük saldırı yüzeylerine sahip olarak güvenliği artırır.

Geliştirici, her sayfa yükünde wp-cron'u çağırmak zorunda kalmadan işlerin nasıl yapılacağını anlayamazsa, bu sadece onun adına deneyimsizlik için konuşur. "Yalnız bırakmak", çünkü işlerin nasıl çalıştığını anlamak için iyi bir neden değil.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.