WordPress wp-cron.php Macerası Devam Ediyor
Evet! Bir önceki yazımda WordPress cron işlemini iptal edip, tetiklemeyi daha uzun bir periyot ile ve Cpanel üzerinden denediğimi, sonra da bütün işlemleri geri aldığımı yazmıştım.
Bir kaç gün önce hosting firmamdan bir mesaj aldım. İşlemci yoğunluk limitlerini aştığım ve tekrarlanması halinde önlem alınacağını bildiriyordu.
Böylesine durumlar yabancı hosting firmalarında genellikle çok daha kibarca hallediliyor. Bizimkiler, doğru dürüst bir inceleme yapmadan paldır küldür yasaklamaya gitmeyi tercih ediyor.
Bu durum büyük bir olasılıkla harici bir bot vb ile yaratılmış olmalı. Çünkü aynı sistem uzunca bir süredir sorunsuz çalışıyordu. Üstelik son günlerde başka işlerim nedeniyle web üzerinde herhangi bir çalışma yapmaya fırsatım bile olmamıştı.
Sonra bir mesaj daha geldi. Ancak bu mesajda incelik gösterip sorun kaynağını wp-cron.php olarak belirtmişlerdi.
Cron.php’nin işlemci yüküne sebep olabildiğini zaten bildiğim için doğrudan kendi önlemlerimi almaya karar verdim.
İnterneti bu amaçla yeniden taradım. Ve bu sefer, multisite wordpress uygulamalarında, her subdomain için wp-cron.php çağrısının ayrı ayrı tekrarlanması gerektiği bilgisine ulaştım. Gayet mantıklı bir açıklama. Çözüm olarak önerilen çeşitli scriptler var. Ben, aşağıdaki çözümü sadeliği ve kolay anlaşılırlığı açısından tercih ettim:
<?php
if( php_sapi_name() !== 'cli' ) {
die("Meant to be run from command line.n");
}
// Modify this based on site domain
$_SERVER['HTTP_HOST'] = 'yoursite.com';
define( 'WP_USE_THEMES', false );
global $wp, $wp_query, $wp_the_query, $wp_rewrite, $wp_did_header;
require_once( dirname( __FILE__ ) . '/wp-load.php' );
if ( ! function_exists( 'wp' ) )
die( 'Couldn't load WordPress :(' );
if ( ! is_multisite() )
die( 'Multisite is not enabled.' );
global $wpdb;
$sql = $wpdb->prepare("SELECT domain, path FROM $wpdb->blogs WHERE archived='0' AND deleted ='0' LIMIT 0,300", '');
$blogs = $wpdb->get_results($sql);
foreach($blogs as $blog) {
$command = "http://" . $blog->domain . ($blog->path ? $blog->path : '/') . 'wp-cron.php';
//echo $command . "n";
wp_remote_get( $command );
}
?>
Yukarıdaki kodun 7. satırındaki ‘yoursite.com’ değerini kendi ana domain adınızla değiştirmeyi unutmamalısınız.
Bu scripti wp-cron-mu.php olarak isimlendirebiliriz. Bu script, ana domain de dahil olmak üzere aktif durumdaki tüm subdomain sitelerin wp-cron.php dosyalarını tek tek çalıştırıyor.
Cpanel cron komutu da şöyle değişiyor:
*/15 * * * * /usr/bin/php /var/www/yoursite/wp-cron-mu.php > /dev/null
Burada da yoursite.com adresini doğru adresle değiştirmeniz gerekiyor. Çağrılar 15 dakikada bir.
Bakalım işlemcilerin aşırı yüklenmesini bu önlem giderebilecek mi? Sanırım bir kaç gün içinde netleşir!
Eğer siz de multisite wordpress kullanıyorsanız, bu yönteme ihtiyacınız olabilir.
ahmet aksoy
Kaynaklar: