ওয়ার্ডপ্রেস ক্রন জব: WP-Cron কেন আপনার সাইট স্লো করে আর শিডিউল মিস করায়
শিডিউল করা পোস্ট সময়মতো পাবলিশ হয়নি, পাশে লাল অক্ষরে লেখা “Missed schedule”? ব্যাকআপ প্লাগইন বলছে প্রতি রাতে ব্যাকআপ হচ্ছে, অথচ গত এক সপ্তাহে একটাও হয়নি? সমস্যাটা প্লাগইনে না, সমস্যা ওয়ার্ডপ্রেস ক্রন জব সিস্টেমে, যার নাম WP-Cron।
WP-Cron আসলে কোনো ক্রন না। এটা একটা জোড়াতালি সমাধান, যেটা ছোট ব্লগের জন্য চলে, কিন্তু বিজনেস সাইটে নীরবে স্পিড আর নির্ভরযোগ্যতা দুটোই খায়। ভালো খবর হলো, ঠিক করতে লাগে মাত্র ১০ মিনিট।
WP-Cron আসলে কীভাবে কাজ করে
WP-Cron চলে ভিজিটরের উপর ভর করে, ঘড়ির উপর না। কেউ সাইটে ঢুকলে ওয়ার্ডপ্রেস চেক করে কোনো শিডিউলড কাজ বাকি আছে কিনা। বাকি থাকলে নিজের সার্ভারেই wp-cron.php ফাইলে একটা আলাদা রিকোয়েস্ট পাঠায়, আর সেই রিকোয়েস্ট কাজগুলো চালায়।
শিডিউলড পোস্ট পাবলিশ, ব্যাকআপ, প্লাগইন আপডেট চেক, ইমেইল কিউ, WooCommerce-এর Action Scheduler, সব কিছু এই একটা সিস্টেমের উপর নির্ভর করে। মানে WP-Cron ঝিমিয়ে পড়লে সাইটের অর্ধেক অটোমেশন ঝিমিয়ে পড়ে।
আসল লিনাক্স ক্রন সার্ভারের ঘড়ি ধরে চলে: রাত ২টা মানে রাত ২টা। WP-Cron-এর কাছে রাত ২টা মানে “রাত ২টার পর প্রথম যে ভিজিটর আসবে, তখন”।
ডিফল্ট WP-Cron-এর তিনটা আসল সমস্যা
সংক্ষেপে: কম ট্রাফিকে কাজ দেরিতে হয়, বেশি ট্রাফিকে সার্ভারে বাড়তি চাপ পড়ে, আর পেজ ক্যাশ থাকলে কাজ আদৌ ট্রিগার নাও হতে পারে।
তৃতীয় পয়েন্টটা বিশেষ করে গুরুত্বপূর্ণ। ক্যাশিং প্লাগইন বসানো দরকার, কিন্তু বসানোর পর WP-Cron আলাদাভাবে ঠিক না করলে একটা সমস্যা সমাধান করতে গিয়ে আরেকটা তৈরি হয়। কোন ক্যাশিং প্লাগইন কোন সাইটে মানায়, সেটা নিয়ে WP Rocket, LiteSpeed Cache আর W3 Total Cache-এর তুলনা পোস্টে বিস্তারিত আছে।
আপনার সাইটে WP-Cron সমস্যা আছে কিনা কীভাবে বুঝবেন
সবচেয়ে সহজ জায়গা হলো ড্যাশবোর্ডের Tools → Site Health। সেখানে “A scheduled event is late” বা loopback request ফেইল হওয়ার ওয়ার্নিং থাকলে WP-Cron ঠিকমতো চলছে না।
আরো বিস্তারিত দেখতে চাইলে নিচের লক্ষণগুলো মিলিয়ে নিন:
কোন কোন ক্রন ইভেন্ট রেজিস্টার করা আছে সেটা দেখার জন্য WP Crontrol প্লাগইন সবচেয়ে কাজের টুল। অনেক সময় দেখা যায়, বহু আগে ডিলিট করা প্লাগইনের ইভেন্ট এখনো প্রতি ঘণ্টায় চলছে, যার আর কোনো কাজ নেই। SSH অ্যাক্সেস থাকলে WP-CLI দিয়েও দেখা যায়:
wp cron event list
wp cron test
wp-cron.php ডিজেবল করে রিয়েল ক্রন জব সেটআপ
সমাধান দুই ধাপের: ভিজিটর-নির্ভর WP-Cron বন্ধ করা, তারপর সার্ভারের আসল ক্রন দিয়ে নির্দিষ্ট সময় পরপর wp-cron.php চালানো। দ্বিতীয় ধাপ বাদ দিলে সাইটের সব শিডিউলড কাজ পুরোপুরি বন্ধ হয়ে যাবে, তাই দুটো একসাথে করতে হবে।
ধাপ ১: wp-config.php তে WP-Cron বন্ধ করুন। ফাইল ম্যানেজার বা FTP দিয়ে wp-config.php খুলে /* That's all, stop editing! */ লাইনের ঠিক উপরে এই লাইনটা বসান:
define( 'DISABLE_WP_CRON', true );
ধাপ ২: cPanel ক্রন জব যোগ করুন। বাংলাদেশের বেশিরভাগ শেয়ার্ড হোস্টিংয়ে cPanel থাকে, তাই সেখানকার প্রসেস:
- cPanel-এ লগইন করে Advanced সেকশনের Cron Jobs খুলুন
- Common Settings থেকে “Once Per Five Minutes” বা “Twice Per Hour” বেছে নিন
- Command ঘরে নিচের যেকোনো একটা কমান্ড বসান (example.com এর জায়গায় নিজের ডোমেইন)
- Add New Cron Job চাপুন, তারপর একটা টেস্ট পোস্ট ৫ মিনিট পরে শিডিউল করে যাচাই করুন
সবচেয়ে কমন কমান্ড, যেটা প্রায় সব হোস্টিংয়ে চলে:
wget -q -O - "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1
HTTP রিকোয়েস্ট ছাড়াই সরাসরি PHP দিয়ে চালানো আরো পরিষ্কার, কারণ এতে ওয়েব সার্ভার বা ফায়ারওয়ালের ঝামেলা থাকে না। PHP বাইনারির পাথ আর ইউজারনেম হোস্টিং অনুযায়ী আলাদা হয়, তাই হোস্টিং সাপোর্ট থেকে নিশ্চিত হয়ে নিন:
/usr/local/bin/php /home/username/public_html/wp-cron.php >/dev/null 2>&1
cPanel-এর প্রতিটা কোণা, ক্রন জব থেকে শুরু করে ফাইল ম্যানেজার আর ব্যাকআপ পর্যন্ত, হাতে-কলমে শিখতে চাইলে cPanel Mastery কোর্স এই কাজের জন্যই বানানো।
ক্রন জব কত মিনিট পরপর চালানো উচিত
বেশিরভাগ সাইটের জন্য ৫ মিনিট যথেষ্ট। প্রতি মিনিটে চালানোর দরকার নেই, এটা শুধু অপ্রয়োজনীয় PHP প্রসেস বাড়ায়।
যে ভুলগুলো এড়িয়ে চলবেন
সবচেয়ে বড় ভুল হলো DISABLE_WP_CRON বসিয়ে রিয়েল ক্রন সেটআপ করতে ভুলে যাওয়া। কয়েক সপ্তাহ পর টের পাওয়া যায় যে একটাও ব্যাকআপ হয়নি, আর ঠিক তখনই সাইটটা হ্যাক হয়।
দ্বিতীয় কমন ভুল হলো সাইট মাইগ্রেট করার পর পুরনো হোস্টিংয়ের ক্রন জব চালু রেখে দেওয়া, আর নতুন হোস্টিংয়ে সেটআপ না করা। wp-config.php নতুন সার্ভারে চলে যায়, কিন্তু ক্রন জব যায় না।
তৃতীয়টা হলো অরফান ইভেন্ট পরিষ্কার না করা। প্লাগইন ডিলিট করলেও তার শিডিউল করা ইভেন্ট অনেক সময় wp_options টেবিলের cron অপশনে থেকে যায়, আর এই অপশনটা প্রতিটা পেজলোডে অটোলোড হয়। অটোলোডেড ডেটা কীভাবে সাইট স্লো করে আর কীভাবে পরিষ্কার করতে হয়, সেটা ওয়ার্ডপ্রেস ডেটাবেজ অপটিমাইজেশন গাইডে ধাপে ধাপে দেখানো আছে।
যেকোনো পরিবর্তন আগে স্টেজিং সাইটে টেস্ট করে তারপর লাইভে নেওয়া ভালো, বিশেষ করে WooCommerce স্টোরে।
কখন নিজে করবেন, কখন প্রফেশনাল দিয়ে
একটা সাধারণ ব্লগে উপরের দুই ধাপ নিজেই করা যায়। কিন্তু WooCommerce স্টোর, মেম্বারশিপ সাইট বা অনেক ব্যাকগ্রাউন্ড টাস্ক থাকা সাইটে WP-Cron ঠিক করা মানে Action Scheduler-এর কিউ, অরফান ইভেন্ট, ক্যাশ কনফিগারেশন আর সার্ভার লিমিট সব একসাথে মেলানো।
১০+ বছর ধরে ওয়ার্ডপ্রেস সাইট বানানো আর ৯৫০+ ফাইভার ক্লায়েন্ট প্রজেক্টের পর একটা জিনিস পরিষ্কার: স্লো সাইটের সমস্যা প্রায় কখনো একটা কারণে হয় না। WP-Cron সেই লুকানো কারণগুলোর একটা, যেটা PageSpeed রিপোর্টে কখনো দেখায় না।
এই পুরো কাজটা অন্য কাউকে দিয়ে করাতে চাইলে Coders Foundation-এর ওয়ার্ডপ্রেস স্পিড অপটিমাইজেশন সার্ভিস দেখতে পারেন, যেখানে ক্রন, ডেটাবেজ, ক্যাশ আর ইমেজ সব একসাথে ঠিক করা হয়। আর নিজে ওয়ার্ডপ্রেসের ভেতর-বাইরে শিখে ক্লায়েন্টদের এই সার্ভিস দিতে চাইলে WordPress Pro: From Beginner to Expert কোর্সটা শুরু করার সঠিক জায়গা।
শেষ কথা
ভিজিটরের উপর নির্ভর করে চলা টাইমার দিয়ে বিজনেস চালানো যায় না। DISABLE_WP_CRON এক লাইন, cPanel ক্রন জব এক মিনিটের কাজ। আজই সেট করুন, তারপর একটা টেস্ট পোস্ট শিডিউল করে নিশ্চিত হয়ে নিন।