آیا تا امروز به این فکر کردهاید که تسکهای زمانبندی شده در وردپرس که باید سر تایمی خاص یا در دفعات و زمانهای منظمی اجرا شوند چگونه کار میکنند؟ یا بطور مثال اگر مقالهای در وردپرس نوشتهاید و آن را تنظیم کردهاید که فردا سر ساعت خاصی بطور خودکار منتشر شود، چگونه وردپرس آن را دقیق سر آن تایم و روز خاص منتشر میکند؟
WP-Cron چیست؟
وردپرس دارای یک فایل به نام WP-Cron است که وظیفه انجام برنامهریزی و زمانبندی فعالیتهای مختلف برای سایت ما را بر عهده دارد. این فایل یک کرون واقعی نیست ولی کارهای cron را انجام می دهد. این فایل wp-cron.php به عنوان کران مجازی برای خودکار کردن کارهایی مانند موارد زیر را در وردپرس انجام میدهد:
- انتشار پستهای زمانبندیشده
- بررسی بهروزرسانی افزونه یا قالب
- ارسال ایمیلهای اطلاعرسانی
- بررسی اعلانهای افزونهها
- و موارد دیگر
به عنوان مثال، فرض کنید شما پستی را برای انتشار در روز چهارشنبه هفته آینده ساعت 9:30 صبح برنامهریزی کردهاید. wp-cron اطمینان حاصل میکند که این اتفاق به موقع و سر تایم برنامهریزی شده رخ دهد.
هرچه لیست کارهای بیشتری برای بررسی وجود داشته باشد و محتوای سایت شما حجیمتر باشد، بار بیشتری روی پردازنده و منابع سرور شما گذاشته میشود.
نام کران (کرون) از سیستم یونیکس برای زمانبندی کارها گرفته شده است و به هر دستوری که در بازههای زمانی خاص به صورت خودکار اجرا شود گفته می شود.
زمانی که کاربری برای بازدید وارد هر کدام از صفحات سایت شما میشود (چه در جلوی سایت و چه در پنل مدیریت) پردازش WP-Cron.php هم اجرا می شود و به بررسی تمام وظایفی که باید بررسی شوند میپردازد و اگر وظیفهای وجود داشته باشد، آن را اجرا می کند. نکته منفی این فایل اینست که اگر سایت شما بازدیدی نداشته باشد اجرای این فایل انجام نمیشود و تمامی وظایف و تسکهای زمانبندی شده انجام نشده میمانند.
درواقع وردپرس فقط با هر بار بارگذاری صفحه، موارد زمانبندیشده را بررسی میکند که برای سایتهای با ترافیک کم تا متوسط عالی است، اما در سایتهای شلوغ، این عمل اسکن مداوم میتواند سرعت کار و سایت وردپرسی شما را به میزان قابل توجهی کاهش دهد.
برای مثال، فرض کنید شما آن پست را برای انتشار در روز چهارشنبه هفته آینده ساعت 9:30 صبح برنامهریزی کردهاید، اما سایت شما در آن زمان بازدید کنندهای ندارد. در واقع، سایت شما تا ساعت 11:30 صبح بازدید بعدی خود را دریافت نمیکند. بله، در چنین رخداد و اتفاقی، پست شما تا ساعت 11:30 صبح منتشر نمی شود، زیرا زمانی که هیچ بازدیدکننده ای وجود ندارد، wp-cron قادر به اجرا نمیباشد. همچنان زمان انتشار را به عنوان 9:30 صبح نشان می دهد اما تا ساعت 11:30 صبح به طور واقعی در سایت شما نمایش داده نمیشود.
درک چگونگی عملکرد WP-CRON وردپرس
کران جاب وردپرس (WP-CRON) هر بار که صفحهای از سایت لود میشود، رویدادهای زمانبندی شده (scheduled events) را بررسی میکند. این روش برای حجم متوسط و ثابتی از ترافیک به خوبی کار میکند، اما در دو حالت افراطی با مشکلاتی مواجه می شود:
ترافیک بالا: اگر سایت ترافیک بسیار زیادی دریافت کند، دائماً در حال بررسی برنامهزمانبندی WP-CRON خود است، که باعث افزایش کار مورد نیاز سرور و تأثیر منفی بر عملکرد می شود. WP-Cron زمانی که بازدیدکنندگان همزمان در سایت خود دارید، می تواند چندین بار اجرا شود. برای مثال، اگر همزمان 50 بازدیدکننده داشته باشید، WP-Cron ممکن است 50 بار به طور همزمان اجرا شود. فرض کنید گروهی از بازدیدکنندگان روی یک لینک یکسان کلیک کنند. در این صورت، WP-Cron می تواند چندین بار همزمان اجرا شود، که باعث افزایش زمان بارگذاری صفحه و احتمالاً تأثیرگذاری بر عملکرد کلی سایت شما می شود.
این نکته مهم است که حتی رباتهای موتورهای جستجو نیز زمانی که در پاسخ به پرسشهای جستجو، سایت شما را crawl می کنند، به عنوان بازدیدکننده در نظر گرفته می شوند. این بدان معناست که WP-Cron می تواند توسط بازدیدهای ربات نیز فعال شود و بر عملکرد سایت شما تأثیر بیشتری بگذارد.
وردپرس سعی می کند با محدود کردن اجرای آن به بیش از یک بار در هر 60 ثانیه، این موضوع را محدود کند، اما به دلایل فنی مختلف، مانند بازدیدهای همزمان که هر دو wp-cron را فعال میکنند، همچنان می تواند باعث کاهش عملکرد سایت وردپرسی شما شود.
ترافیک پایین: برعکس، اگر ترافیک کم یا اصلاً وجود نداشته باشد، سایت موارد زمانبندیشده خود را به اندازه کافی سریع بررسی نمیکند و ممکن است کارهای زمانبندیشده، مانند بکاپگیری از یک افزونه یا یک پست زمانبندیشده را از دست بدهد. WP-Cron به تعاملات کاربر با وب سایت شما وابسته است. اگر کسی در زمان مشخص شده برای اجرای یک کار برنامه ریزی شده از سایت شما بازدید نکند، WP-Cron اجرا نخواهد شد و باعث تأخیر در اجرای کار می شود. این تأخیر در داشبورد وردپرس شما به عنوان “تأخیر” نمایش داده می شود و به طور بالقوه بر برنامه انتشار محتوای شما تأثیر می گذارد.
اکنون راه حل این مشکل برای تمامی سایتها این است که WP-Cron وردپرس را غیرفعال کنید و در عوض، وظایف خود را با استفاده از یک کران سیستمی زمانبندی کنید تا به جای هر بار بارگذاری صفحه، در فواصل زمانی مشخص اجرا شوند و بدین ترتیب عملکرد سایت شما را بهبود بخشید. با یک کرون جاب واقعی، میتوانید وظایف خود را برای اجرا در هر X دقیقه تنظیم کنید، بدون توجه به اینکه بازدید وجود داشته باشد یا خیر.
اصلاح این عملکرد یک فرآیند دو بخشی است:
- جلوگیری از WP-CRON برای بررسی مداوم رویدادها با غیرفعال کردن wp-cron داخلی وردپرس
باید ویژگی داخلی wp-cron را غیرفعال کنید تا وردپرس فایل wp-cron.php را در هر بازدید اجرا نکند. برای انجام این کار، تنها کافی است یک خط کد به فایل wp-config.php سایت خود اضافه کنید. - ایجاد یک کران استاندارد که هر رویداد زمانبندی شده را در سایت شما اجرا کند با راهاندازی کرون جاب اختصاصی
شما نیاز دارید تا کرون جاب خود را برای فراخوانی wp-cron.php در زمانبندی دلخواه خود راهاندازی کنید. با این کار، میتوانید wp-cron.php را در یک زمانبندی خاص اجرا کنید، صرف نظر از اینکه سایت شما ترافیک دریافت میکند یا خیر.
غیرفعال کردن WP-CRON وردپرس
با استفاده از مراحل زیر می توانیم WP-Cron (wp-cron.php) را در فایل wp-config.php غیرفعال کنیم:
- به کنترل پنل هاست خود مراجعه کرده و وارد بخش فایل منیجر هاست شوید. در مسیر نصب وردپرس وردپرس (root directory) فایل
wp-config.php
را پیدا کنید و آن را به حالت ویرایش ببرید (همان پوشه public_html که حاوی پوشههای wp-admin و wp-content و غیره است).
با توجه به اینکه فایل wp-config.php یک فایل پیکربندی کلیدی است، اکیدا توصیه می کنیم قبل از ایجاد هرگونه تغییر، از سایت خود پشتیبان تهیه کنید (یا حداقل یک کپی از فایل اصلی wp-config.php تهیه کنید تا در صورت بروز هر مشکلی بتوانید نسخه پشتیبان را جایگزین کنید).
- کد زیر را به کپی کرده و به فایل wp-config.php اضافه کنید. شما باید این کد را قبل از عبارت
/* That's all, stop editing! Happy publishing. */
قرار دهید.
define('DISABLE_WP_CRON', true);
- اکنون تغییرات را ذخیره نمایید. این کار باعث میشود کران در هر بار بارگذاری صفحه اجرا نشود، بلکه فقط زمانی که مستقیماً از طریق
wp-cron.php
آن را فراخوانی میکنید اجرا میشود. بعد از انجام این کار، وردپرس دیگر فایل wp-cron.php را در هنگام بازدید افراد از وب سایت شما فراخوانی نخواهد کرد.
توجه : در هاست دایرکت ادمین و پلسک و غیره نیز دقیقا مسیر و عملکرد به همین ترتیب اشاره شده بالا است.
ایجاد و تنظیم کران جاب (Cron Job) در هاست سیپنل
- وارد محیط کنترل پنل هاست سیپنل خود شوید و در بخش Advanced گزینه Cron Jobs را انتخاب کنید.
- اکنون در قسمت Add New Cron Job در از منو آبشاری فیلد Common Settings گزینه
Once Per Minute(* * * * *)
را انتخاب نمایید و سپس کد زیر را در بخش Command وارد نموده و پس از تصحیح کد و قرار دادن نام دامنه خود بجای yourdomain.com دکمه Add New Cron Job را بزنید تا کران جاب جدید ایجاد شود.
wget -q -O - https://yourdomain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
بطور خلاصه ما در کانفیگ بالا به سیستم کران جاب هاست گفتیم که هر 1 دقیقه یک بار فایل wp-cron.php ما را اجرا کن.
- با زدن دکمه Add New Cron Job و ظاهر شدن پیغام موفقیتآمیز cPanel successfully added the cron job کار به پایان رسیده است و اکنون شما در قسمت Current Cron Jobs یک کران جاب فعال دارید. اکنون سایت وردپرسی شما به طور ایمن و در فواصل زمانی تعیینشده وظایف زمانبندیشده (scheduled events) را از طریق اسکریپت wp-cron.php اجرا کند.
ایجاد کرون جاب (Cron Job) در هاست دایرکت ادمین
- وارد محیط کنترل پنل هاست دایرکت ادمین خود شوید و در بخش Advanced Features گزینه Cron Jobs را انتخاب کنید.
- اکنون در این بخش بر روی دکمه Create Cron Job کلیک کنید.
- اکنون در این قسمت مطابق روند و کار توضیح داده شده در بخش سیپنل عمل کنید و مقادیر و دستور را همان مقادیر قرار داده و در نهایت روی دکمه Create کلیک کنید تا کران جاب شما ایجاد شود.
به همین راحتی ما توانستیم سیستم WP-Cron وردپرس را غیرفعال کنیم و یک Cron Job واقعی در هاست خود ایجاد کنیم تا کلیه اعمال و کارهای زمانبندی شده وردپرس ما را مدیریت نماید و نتیجه آن باعث عملکرد صحیح و سرعت بالای سایت ما خواهد شد.
اگر در هر مرحله و قسمت اشکالی دارید و یا هر سوالی در خصوص غیرفعال کردن WP-Cron وردپرس و تنظیم Cron Job واقعی هاست دارید در قسمت کامنتها عنوان کنید و بپرسید تا سریعا پاسخگوی شما باشیم.