בוורדפרס, "missed cron" אינו רעש - זה אומר שמשימה ידועה הייתה אמורה לרוץ לפני 24 שעות או יותר ופשוט לא רצה. כל משימה כזו היא תכונה אבודה: גיבוי שלא נוצר, מייל שלא נשלח, סנכרון שלא קרה. כשמספר ה-hooks התקועים גדל, האתר שקט אבל בפועל מתפקד חלקית.
למה זה משנה
וורדפרס מסתמך על cron עבור כמעט כל פעולה רקע: wp_version_check שמאתר עדכוני ליבה, publish_future_post שמפרסם פוסטים מתוזמנים, wp_scheduled_delete שמרוקן את הפח, ו-hooks של תוספים כמו action_scheduler_run_queue של WooCommerce, wpseo_onpage_fetch של Yoast, או updraft_backup של UpdraftPlus. כשאירוע מאחר ביממה, הוא לא רץ "עוד מעט" - הוא מצטבר עם אירועים נוספים, וברוב המקרים מערכת WP-Cron נכנעת ומפסיקה לנסות. התוצאה: WooCommerce לא מעדכן סטטוס הזמנות, Yoast לא בודק קישורים שבורים, UpdraftPlus לא מגבה - ואתה לא יודע על כך עד שאתה צריך גיבוי.
איך לזהות
הדרך הוודאית היא WP-CLI:
wp cron event list --format=table --fields=hook,next_run_relative,next_run_gmtכל hook עם next_run_relative שלילי באופן משמעותי (למשל -2 days) הוא תקוע. חלופה ויזואלית: התקן את התוסף החינמי WP Crontrol ולך ל-Tools > Cron Events. הוא מסמן באדום את ה-hooks שעבר זמנם. ב-RankPlus עצמו, הסריקה מאתרת hooks שה-next_run שלהם פחות מ-time() - 86400.
איך לתקן
- הרץ ידנית את כל המשימות שעבר זמנן:
wp cron event run --due-now. זה מאלץ ביצוע מיידי, מנותק מ-loopback HTTP. - אם זה כושל עם שגיאת PHP, פתח את
wp-content/debug.logאחרי הפעלתWP_DEBUG_LOGב-wp-config.php. השגיאה תזהה את התוסף שמכשיל את ה-loop. - אם hook מסוים תקוע ולא צריך לרוץ יותר (למשל מתוסף שהוסר), מחק אותו:
wp cron event delete <hook>. - תקן את הסיבה השורש: באתר עם תנועה נמוכה, WP-Cron הפנימי לעולם לא יורץ. עבור ל-system cron - ראה הביקורת wp_cron_status למדריך מלא.
- בדוק את הקובץ
doing_crontransient - אם הוא תקוע, ראה הביקורת doing_cron_stale.
טעויות נפוצות
- הפעלה ידנית של wp-cron.php בדפדפן: זה לא תמיד עובד, כי WordPress מבצע lock דרך transient. הרצה דרך WP-CLI אמינה הרבה יותר.
- מחיקת hooks בלי לבדוק מי יצר אותם: hook עם שם זר עלול להיות של תוסף קריטי שעדיין פעיל. בדוק עם
wp cron event listאיזה תוסף רשם אותו לפני מחיקה. - הסתמכות על שירות חיצוני בלי לוודא שהגיע: cron-job.org או EasyCron יכולים להפסיק לעבוד בשקט אם השרת חוסם UA שלהם או דורש Basic Auth.
- WP_CRON_LOCK_TIMEOUT שגוי: ערך נמוך מדי גורם לשני תהליכי cron לרוץ במקביל ולנסות לבצע אותה משימה. ברירת המחדל (60) היא בדרך כלל בסדר.
בדיקה לאחר תיקון
הרץ שוב wp cron event list - כל ה-next_run_relative צריכים להיות בעתיד. בנוסף, חכה 5-15 דקות וודא שmissed_scheduled_posts מתפנים, שגיבוי הבא רץ בזמנו, ושמיילים יוצאים. ב-RankPlus הסטטוס יחזור לירוק במחזור הסריקה הבא.