اگر سایت وردپرسی دارید، بخشی از کارهای سایت بدون اینکه مستقیماً آنها را اجرا کنید، در پسزمینه انجام میشوند. انتشار نوشتههای زمانبندیشده، بررسی بروزرسانیها، بعضی بکاپها، ارسال ایمیل و پردازشهای افزونهها نمونههایی از این کارها هستند.
بخش زیادی از این وظایف با کمک WP-Cron وردپرس زمانبندی میشوند.
WP-Cron در حالت عادی مشکلی برای سایت ایجاد نمیکند؛ اما اگر تعداد کارهای زمانبندیشده زیاد شود یا یک افزونه مرتب پردازش سنگینی اجرا کند، میتواند به افزایش مصرف CPU، درگیری دیتابیس و مصرف بیشتر منابع هاست منجر شود.
در این مقاله بررسی میکنیم WP-Cron چطور کار میکند، چه زمانی میتواند مشکلساز شود و چطور بفهمیم یک Cron Job در حال مصرف غیرعادی منابع سایت است.
WP-Cron وردپرس چیست؟
WP-Cron سیستم زمانبندی داخلی وردپرس است. وردپرس و افزونهها میتوانند با استفاده از آن مشخص کنند که یک کار در زمان مشخص یا در بازههای منظم اجرا شود.
برای مثال ممکن است یک افزونه بخواهد:
- هر یک ساعت اطلاعاتی را بروزرسانی کند.
- روزی یک بار فایلهای موقت را پاک کند.
- در زمان مشخصی ایمیل ارسال کند.
- بهصورت دورهای از اطلاعات سایت بکاپ بگیرد.
- اطلاعاتی را از یک سرویس دیگر دریافت یا همگامسازی کند.
- به هرکدام از این کارهای زمانبندیشده میتوان بهصورت ساده یک Cron Event گفت.
- بنابراین وجود Cron Eventهای مختلف در وردپرس کاملاً طبیعی است.
WP-Cron چطور کار میکند؟
تفاوت مهم WP-Cron با Cron واقعی سرور در نحوه اجرای آن است.
Cron سرور میتواند مثلاً دقیقاً مشخص کند که یک دستور هر 5 دقیقه اجرا شود. اما WP-Cron برای شروع بررسی کارهای زمانبندیشده از مکانیزم درخواستهای وردپرس استفاده میکند.
فرض کنید یک کار برای ساعت 14:00 زمانبندی شده است. وقتی سایت درخواست دریافت میکند، وردپرس میتواند بررسی کند که آیا کاری به زمان اجرای خود رسیده است یا خیر. اگر Event موعدرسیدهای وجود داشته باشد، اجرای آن در پسزمینه آغاز میشود.
در نسخههای جدید WordPress نیز نحوه شروع WP-Cron بهینهتر شده تا تأثیر آن بر پاسخ اولیه صفحه کمتر شود.
پس قرار نیست با هر بازدید تمام Cron Jobهای سایت اجرا شوند؛ وردپرس بررسی میکند که آیا کاری موعد اجرا دارد یا خیر.

WP-Cron چطور باعث مصرف منابع وردپرس میشود؟
اینجا یک سوءتفاهم رایج وجود دارد:
خود WP-Cron معمولاً مشکل اصلی نیست؛ کاری که از طریق آن اجرا میشود میتواند مشکلساز باشد.
فرض کنید یک افزونه هر 5 دقیقه اطلاعات تعداد زیادی محصول را بررسی میکند. افزونه برای انجام این کار یک Cron Event ایجاد کرده است.
هر بار که Event اجرا میشود، ممکن است PHP درگیر شود، Queryهایی روی دیتابیس اجرا شوند و CPU برای انجام پردازش استفاده شود.
اگر این عملیات سبک باشد، احتمالاً حتی متوجه اجرای آن نمیشوید.
اما اگر پردازش سنگین باشد یا بیش از حد تکرار شود، ممکن است مصرف منابع سایت افزایش پیدا کند.
یک مثال ساده:
| کار | زمان اجرا | وضعیت |
|---|---|---|
| بررسی بروزرسانیها | هر چند ساعت | سبک |
| پاکسازی اطلاعات موقت | روزانه | سبک |
| همگامسازی محصولات | هر 5 دقیقه | سنگین |
در این مثال داشتن سه Cron Job مشکل نیست.
چیزی که باید بررسی شود همگامسازی محصولات هر 5 دقیقه است؛ چون هم فاصله اجرای کوتاهی دارد و هم ممکن است پردازش سنگینی انجام دهد.
به همین دلیل صرفاً شمردن تعداد Cron Eventها روش خوبی برای تشخیص مشکل نیست.
چه چیزهایی معمولاً از WP-Cron استفاده میکنند؟
وردپرس خودش برای بعضی فعالیتهای داخلی از WP-Cron استفاده میکند، اما افزونهها هم میتوانند Eventهای خودشان را به آن اضافه کنند.
برای مثال سیستمهای بکاپ، افزونههای امنیتی، ارسال ایمیل، Import و Export، همگامسازی اطلاعات، پاکسازی دیتابیس و بعضی سیستمهای گزارشگیری ممکن است کارهایی را در پسزمینه اجرا کنند.
این موضوع به معنی بد بودن این افزونهها نیست. اجرای دورهای برای بسیاری از قابلیتها ضروری است.
مشکل زمانی ایجاد میشود که یک پردازش بیش از حد سنگین، پرتکرار یا دچار خطا باشد.
از کجا بفهمیم WP-Cron منابع زیادی مصرف میکند؟
اگر مصرف CPU سایت بالاست، نباید مستقیماً WP-Cron را مقصر بدانیم. افزونهها، رباتها، Queryهای سنگین، درخواستهای AJAX و حتی افزایش واقعی ترافیک هم میتوانند مصرف منابع را بالا ببرند.
اما چند نشانه میتواند باعث شود Cron Jobها را هم بررسی کنیم.
مثلاً اگر در نمودار مصرف CPU مشاهده میکنید که تقریباً در فاصلههای منظم مصرف منابع بالا میرود، احتمال وجود یک پردازش زمانبندیشده ارزش بررسی دارد.
فرض کنید CPU تقریباً هر 15 دقیقه افزایش پیدا میکند. اگر همزمان یک افزونه هم Cron Event پانزدهدقیقهای داشته باشد، میتوانیم بررسی را از همان Event شروع کنیم.
این هنوز ثابت نمیکند که Cron مقصر است؛ فقط یک سرنخ برای پیدا کردن عامل واقعی مصرف منابع است.
چطور Cron Jobهای وردپرس را ببینیم؟
برای مشاهده Cron Eventها لازم نیست حتماً برنامهنویس باشید.
یکی از ابزارهای شناختهشده برای این کار افزونه WP Crontrol است. این افزونه امکان مشاهده Eventهای زمانبندیشده وردپرس، زمان اجرای بعدی و فاصله تکرار آنها را فراهم میکند.
کاربران فنیتر نیز میتوانند با WP-CLI اطلاعات Cron را مشاهده کنند: wp cron event list
اما برای عیبیابی اولیه، مهمتر از ابزار این است که به سه مورد توجه کنیم:
این Event متعلق به چیست؟ هر چند وقت اجرا میشود؟ چه کاری انجام میدهد؟
اگر Event ناشناختهای هر چند دقیقه اجرا میشود، پیدا کردن افزونه یا قابلیتی که آن را ایجاد کرده قدم بعدی بررسی است.
آیا زیاد بودن Cron Eventها بد است؟
الزاماً خیر. ممکن است یک سایت تعداد زیادی Cron Event داشته باشد ولی همه آنها بسیار سبک باشند. از طرف دیگر ممکن است سایتی Eventهای کمی داشته باشد اما فقط یکی از آنها پردازش بسیار سنگینی انجام دهد.
تعداد Cron Jobها بهتنهایی معیار مناسبی برای تشخیص مصرف منابع نیست؛ نوع پردازش و دفعات اجرای آن اهمیت بیشتری دارد.
این نکته مخصوصاً زمانی مهم میشود که قصد دارید برای حل مشکل مصرف CPU، Eventها را بدون بررسی حذف کنید.
آیا غیرفعال کردن WP-Cron باعث افزایش سرعت وردپرس میشود؟
این یکی از توصیههایی است که در آموزشهای بهینهسازی وردپرس زیاد دیده میشود.
معمولاً پیشنهاد میشود این مقدار در wp-config.php قرار بگیرد:
define( ‘DISABLE_WP_CRON’, true );
اما این کد راهحل مستقیم کاهش مصرف منابع نیست.
با این کار اجرای معمول WP-Cron غیرفعال میشود. اگر هیچ جایگزینی برای آن تعریف نشده باشد، بعضی فعالیتهای زمانبندیشده سایت ممکن است بهموقع انجام نشوند.
بنابراین اگر قرار است WP-Cron غیرفعال شود، معمولاً باید Cron واقعی سرور جای آن را بگیرد.
تفاوت WP-Cron و Cron واقعی سرور چیست؟
WP-Cron برای سادگی طراحی شده و در بسیاری از سایتهای وردپرسی بهخوبی کار میکند. در مقابل، Cron واقعی توسط خود سرور و طبق برنامه زمانی مشخص اجرا میشود.
| WP-Cron وردپرس | Cron سرور |
|---|---|
| توسط مکانیزم وردپرس مدیریت میشود | توسط سرور اجرا میشود |
| تنظیم اولیه ساده است | نیاز به تنظیم در هاست دارد |
| برای بسیاری از سایتها کافی است | زمان اجرای قابلکنترلتری دارد |
| اجرای آن به رفتار درخواستهای سایت وابسته است | طبق زمانبندی مشخص اجرا میشود |
برای یک سایت معمولی لزوماً نیازی به تغییر WP-Cron نیست.
اما برای سایتهای پرترافیک یا سایتهایی که پردازشهای پسزمینه زیادی دارند، استفاده از Cron واقعی سرور میتواند کنترل بیشتری روی زمان اجرای Taskها ایجاد کند.
آیا Server Cron مصرف CPU را کاهش میدهد؟
اینجا باید یک نکته مهم را در نظر بگیریم.
فرض کنید افزونهای هر 5 دقیقه یک پردازش سنگین اجرا میکند.
اگر WP-Cron را غیرفعال کنیم و Server Cron جای آن بگذاریم، خود آن پردازش همچنان سنگین است.
یعنی تغییر Scheduler الزاماً مشکل اصلی را حل نمیکند.
بهتر است مشکل را در این ترتیب بررسی کنیم:
| مرحله | چه چیزی بررسی شود؟ |
|---|---|
| 1 | چه زمانی مصرف CPU بالا میرود؟ |
| 2 | آیا افزایش مصرف الگوی زمانی مشخصی دارد؟ |
| 3 | چه Cron Eventهایی در همان بازه اجرا میشوند؟ |
| 4 | Event مشکوک متعلق به کدام افزونه است؟ |
| 5 | آن افزونه هنگام اجرا چه پردازشی انجام میدهد؟ |
| 6 | آیا پردازش قابل بهینهسازی است؟ |
| 7 | آیا بعد از بهینهسازی هنوز منابع بیشتری نیاز داریم؟ |
این ساختار به نظرم خیلی بهتر از فلوهای قبلیه؛ هم داخل مقاله راحت خوانده میشه و هم در موبایل میتونیم به شکل جدول نمایش بدیم.
WP-Cron در WooCommerce چه اهمیتی دارد؟
در یک فروشگاه WooCommerce معمولاً کارهای پسزمینه بیشتری نسبت به یک سایت محتوایی وجود دارد.
پردازش سفارشها، ارسال Webhook، ایمیلها، بروزرسانی اطلاعات و فعالیت افزونههای جانبی میتوانند پردازشهای دورهای ایجاد کنند.
WooCommerce همچنین برای بسیاری از پردازشهای پسزمینه از سیستمی به نام Action Scheduler استفاده میکند.
بنابراین اگر یک فروشگاه WooCommerce مصرف منابع بالایی دارد، بهتر است علاوه بر WP-Cron، وضعیت Scheduled Actions نیز بررسی شود.
وجود تعداد زیادی Action در حالت Pending یا Failed میتواند سرنخ مهمی برای پیدا کردن یک پردازش مشکلدار باشد.
این موضوع خودش ارزش یک مقاله جداگانه دارد و بهتر است اینجا بیش از حد وارد جزئیاتش نشویم.
چه زمانی باید WP-Cron را به Server Cron منتقل کنیم؟
برای هر سایت وردپرسی نیازی به این کار نیست. اگر سایت عملکرد عادی دارد و پردازشهای زمانبندیشده هم بدون مشکل اجرا میشوند، تغییر WP-Cron صرفاً برای اینکه «بهینهتر شود» ضرورت خاصی ندارد.
اما اگر سایت پرترافیک است، تعداد پردازشهای پسزمینه زیاد است، اجرای Cronها قابل پیشبینی نیست یا میخواهید کنترل بیشتری روی زمان اجرای آنها داشته باشید، Server Cron میتواند گزینه مناسبتری باشد.
حتی در این شرایط هم بهتر است ابتدا مشخص شود کدام پردازشها واقعاً منابع مصرف میکنند.
WP-Cron و مصرف بالای CPU وردپرس
اگر با مصرف بالای CPU مواجه هستید، WP-Cron فقط یکی از مواردی است که باید بررسی شود.
ممکن است عامل اصلی یک افزونه، Query سنگین دیتابیس، Bot Traffic، درخواستهای admin-ajax.php، پردازشهای WooCommerce یا Cache نامناسب باشد.
به همین دلیل بهتر است افزایش CPU را بهعنوان یک نشانه ببینیم، نه یک مشکل با یک راهحل ثابت.
اینجا دقیقاً جای لینک داخلی به مقاله قبلی دایوپلاسه:
«مصرف بالای CPU در وردپرس؛ دلایل و روش پیدا کردن مشکل»
این Internal Link از نظر موضوعی هم کاملاً طبیعی است.
جمعبندی
WP-Cron وردپرس سیستم زمانبندی داخلی وردپرس است و وجود آن بهخودیخود باعث کندی سایت نمیشود.
مشکل معمولاً زمانی شکل میگیرد که یک افزونه یا قابلیت، پردازش سنگینی را بیش از حد اجرا کند، Eventهای غیرضروری ایجاد شوند یا بعضی کارهای زمانبندیشده دائماً با خطا مواجه شوند.
بنابراین بهجای غیرفعال کردن WP-Cron بهعنوان اولین راهحل، بهتر است ابتدا Cron Eventها را بررسی کنیم و ببینیم چه چیزی، چند وقت یکبار و با چه میزان پردازشی اجرا میشود.
در بعضی سایتها انتقال اجرای Cron به Server Cron تصمیم مناسبی است؛ اما این تغییر جای پیدا کردن یک افزونه یا پردازش مشکلدار را نمیگیرد.
سوالات متداول
WP-Cron وردپرس چیست؟
WP-Cron سیستم زمانبندی داخلی وردپرس است که برای اجرای کارهای دورهای مانند انتشار نوشتههای زمانبندیشده، بررسی بروزرسانیها و پردازشهای افزونهها استفاده میشود.
آیا WP-Cron باعث کندی وردپرس میشود؟
بهطور معمول خیر. اما اگر یک Cron Event پردازش سنگینی انجام دهد یا با فاصله زمانی بسیار کوتاه اجرا شود، میتواند مصرف CPU و منابع هاست را افزایش دهد.
آیا باید WP-Cron را غیرفعال کنیم؟
برای همه سایتها خیر. اگر WP-Cron غیرفعال شود، بهتر است Cron واقعی سرور جایگزین آن شود تا کارهای زمانبندیشده سایت همچنان اجرا شوند.
چطور بفهمیم کدام Cron Job منابع زیادی مصرف میکند؟
ابتدا زمان افزایش مصرف CPU را بررسی کنید و سپس Cron Eventهایی را که در همان بازه اجرا میشوند پیدا کنید. ابزارهایی مثل WP Crontrol و WP-CLI میتوانند برای مشاهده Eventها کمک کنند.
تفاوت WP-Cron با Cron Job سرور چیست؟
WP-Cron توسط WordPress مدیریت میشود و اجرای آن به مکانیزم درخواستهای سایت وابسته است؛ اما Server Cron طبق یک برنامه زمانی مشخص مستقیماً توسط سرور اجرا میشود.
آیا Server Cron باعث کاهش مصرف CPU وردپرس میشود؟
الزاماً خیر. Server Cron زمان اجرای Taskها را قابلکنترلتر میکند، اما اگر خود یک Task یا افزونه پردازش سنگینی داشته باشد، باید علت مصرف منابع همان پردازش نیز بررسی شود.
WP-Cron در WooCommerce چه کاربردی دارد؟
WooCommerce و افزونههای مرتبط پردازشهای پسزمینه متعددی دارند و از WP-Cron و سیستمهایی مانند Action Scheduler برای اجرای برخی از این کارها استفاده میکنند. در فروشگاههای شلوغ بررسی این پردازشها اهمیت بیشتری دارد.


