WordPress'da rejalashtirilgan postlarni chop etish, plaginlar va mavzular yangilanishini tekshirish, zaxira nusxa olish yoki WooCommerce'dagi kechiktirilgan amallar WP-Cron deb ataladigan ichki mexanizm orqali bajariladi. Uning nomi "cron" bo'lsa ham, u haqiqiy server rejalashtiruvchisi emas. WP-Cron faqat kimdir saytning biror sahifasini ochganda tekshiriladi: WordPress har bir so'rovda "vaqti kelgan vazifa bormi?" deb qaraydi va bor bo'lsa, wp-cron.php fayliga fon so'rovi yuboradi. Bu yondashuv har qanday hostingda sozlashsiz ishlashi uchun o'ylab topilgan, lekin uning jiddiy kamchiliklari bor.
WP-Cron qayerda pand beradi
Birinchi muammo kam tashrifli saytlarda yuz beradi. Agar tunda hech kim saytga kirmasa, soat 7:00 ga rejalashtirilgan yangilik ertalab birinchi tashrif buyuruvchi kelguncha chiqmaydi. Ba'zan esa WordPress postni o'tkazib yuborib, uning yonida "Missed schedule" belgisini ko'rsatadi. Zaxira nusxa yoki obunachilarga xat yuborish kabi vazifalar ham xuddi shunday kechikadi.
Ikkinchi muammo, aksincha, ko'p tashrifli saytlarda bo'ladi. Har bir sahifa ochilishida tekshiruv bajariladi va vaqti kelgan vazifa bo'lsa, wp-cron.php qayta-qayta chaqiriladi. Bu PHP ishchilarini band qiladi va trafik cho'qqisida saytni sekinlashtiradi. Uchinchi holat — to'liq sahifa keshlash: agar sahifalar keshdan berilsa, PHP umuman ishga tushmaydi va WP-Cron ham tekshirilmay qoladi.
Server cron'i bu muammolarning barchasini hal qiladi. U tashrifga bog'liq emas, belgilangan vaqtda aniq ishga tushadi va bitta jarayon sifatida ishlaydi.
1-qadam: WP-Cron'ning avtomatik ishga tushishini o'chirish
Sayt ildizidagi wp-config.php faylini oching va quyidagi qatorni qo'shing. U "That's all, stop editing!" izohidan yuqorida, boshqa define qatorlari yonida turishi kerak, aks holda WordPress uni hisobga olmasligi mumkin.
define( 'DISABLE_WP_CRON', true );
Bu sozlama vazifalarni o'chirmaydi. U faqat WordPress'ga sahifa ochilganda wp-cron.php ni o'zi chaqirmaslikni aytadi. Vazifalar ro'yxati bazada saqlanib qoladi va endi ularni server cron'i ishga tushiradi. Shuning uchun keyingi qadamni o'tkazib yubormang: aks holda rejalashtirilgan postlar va yangilanishlar umuman bajarilmay qoladi.
2-qadam: server cron'ini qo'shish
Eng oddiy usul — wp-cron.php faylini PHP CLI orqali to'g'ridan-to'g'ri ishga tushirish. Bunda so'rov veb-serverdan o'tmaydi va tashrif buyuruvchilar uchun mo'ljallangan ishchilarni band qilmaydi. Ko'pchilik saytlar uchun har 5 yoki 15 daqiqa yetarli.
*/5 * * * * cd /var/www/user/data/www/misol.uz && /usr/bin/php wp-cron.php >> /var/www/user/data/logs/wp-cron.log 2>&1
Agar serverda WP-CLI o'rnatilgan bo'lsa, undan foydalanish yanada aniqroq. Quyidagi buyruq faqat vaqti kelgan vazifalarni bajaradi va natijani matn ko'rinishida chiqaradi, bu esa logni o'qishni osonlashtiradi:
*/5 * * * * cd /var/www/user/data/www/misol.uz && /usr/local/bin/wp cron event run --due-now >> /var/www/user/data/logs/wp-cron.log 2>&1
php va wp buyruqlarining aniq yo'li serverga bog'liq. Uni terminalda which php va which wp bilan tekshiring. Saytingiz qaysi PHP versiyasida ishlayotgan bo'lsa, cron'da ham aynan shu versiya yo'lini ko'rsatish kerak, aks holda yangi plaginlar eski PHP'da sintaksis xatosi berishi mumkin.
Qanday chastota tanlash kerak
Chastotani saytingiz vazifalari belgilaydi. Yangiliklar sayti uchun rejalashtirilgan post bir necha daqiqa kechiksa muammo yo'q, shuning uchun har 5-10 daqiqa qulay. WooCommerce do'koni uchun Action Scheduler navbati ham shu yo'l bilan ishlaydi, shuning uchun buyurtmalar ko'p bo'lsa har 1-2 daqiqaga yaqinlashtirish mumkin. Vizitka sayt yoki kam o'zgaradigan blog uchun har 15-30 daqiqa ham yetadi. Uzoq ishlaydigan vazifalar ustma-ust tushmasligi uchun buyruq oldiga flock -n /tmp/wpcron.lock qo'shish foydali.
3-qadam: hammasi ishlayotganini tekshirish
Sozlashdan keyin vazifalar ro'yxatini WP-CLI bilan ko'rib chiqing. Har bir vazifa uchun keyingi ishga tushish vaqti ko'rsatiladi; agar bu vaqtlar o'tmishda qotib qolmasa va muntazam yangilanib tursa, server cron'i ishlayapti.
cd /var/www/user/data/www/misol.uz
wp cron event list --fields=hook,next_run_relative
wp cron test
WP-CLI bo'lmasa, "WP Crontrol" kabi plagin vazifalar ro'yxatini admin panelda ko'rsatadi. Bir necha soatdan keyin log faylni ham ko'zdan kechiring: unda PHP xatolari bo'lmasligi kerak. Sinov uchun 10 daqiqadan keyinga post rejalashtirib, u o'z vaqtida chiqishini kuzatish ham ishonchli usul.
Amaliy misol: maktab sayti
Samarqanddagi xususiy maktab saytida ma'muriyat e'lonlarni oldindan yozib, ertalab soat 7:30 ga rejalashtirardi, chunki ota-onalar aynan shu vaqtda Telegram kanal orqali havolani olishardi. Tunda saytga tashrif deyarli bo'lmagani uchun e'lonlar ko'pincha soat 8 dan keyin, birinchi tashrif buyuruvchi kelganda chiqar, ba'zilari esa "Missed schedule" bilan qolib ketardi. DISABLE_WP_CRON yoqilib, har 5 daqiqalik server cron'i qo'shilgandan keyin e'lonlar belgilangan vaqtdan ko'pi bilan bir necha daqiqa farq bilan chiqa boshladi. Shu bilan birga, zaxira plagini ham har kecha aniq vaqtda ishlay boshladi.
Keng tarqalgan xatolar
DISABLE_WP_CRONqo'shilgan, lekin server cron'i qo'shilmagan — natijada hech qanday vazifa bajarilmaydi.- Cron'da nisbiy yo'l ishlatilgan yoki
cdunutilgan —wp-cron.phpWordPress fayllarini topa olmaydi. - Qator "That's all, stop editing!" izohidan pastga yozilgan — sozlama kuchga kirmaydi.
- Ko'p saytli (multisite) tarmoqda faqat asosiy sayt uchun cron qo'shilgan — har bir sayt uchun alohida
--urlbilan chaqirish kerak bo'ladi.
sayt.uz hostingida cron vazifasini ISPmanager panelining "Rejalashtiruvchi" bo'limida qo'shasiz, panelga sayt.uz kabinetidan kiriladi. Agar WP-CLI yo'lini yoki kerakli PHP versiyasi qayerdaligini aniqlay olmasangiz, texnik yordamga tiket yozing.