דילוג לתוכן
חיפוש באתר

וורדפרס

WP-Cron: איך המשימות המתוזמנות של וורדפרס עובדות ולמה פוסט לא פורסם בזמן

WP-Cron מופעל רק כשמישהו נכנס לאתר. למה זה גורם ל-Missed schedule, איך מטמון משפיע, ואיך מעבירים את ההפעלה למתזמן המשימות של השרת.

· 1 צפיות ·

WP-Cron הוא מנגנון המשימות המתוזמנות של וורדפרס: הוא מפרסם פוסטים שתוזמנו מראש, בודק עדכונים, מריץ גיבויים של תוספים ושולח מיילים מתוזמנים. ההבדל המהותי ממשימות מתוזמנות רגילות בשרת: WP-Cron לא רץ לפי שעון. הוא מופעל רק כשמישהו נכנס לאתר. באתר עם מעט תנועה — או עם מטמון מלא שלא מריץ PHP — משימות יכולות להתעכב, ומכאן מגיעה ההודעה המוכרת "Missed schedule" על פוסט שלא פורסם בזמן.

איך WP-Cron עובד

לפי מדריך התוספים הרשמי של וורדפרס, בכל טעינת עמוד המערכת בודקת את רשימת המשימות המתוזמנות, ומריצה את אלה שהגיע זמנן. המדריך נותן דוגמה פשוטה: משימה שתוזמנה ל-14:00, באתר שאף אחד לא נכנס אליו עד 17:00, תרוץ ב-17:00.

יש לזה גם צד חיובי: משימה שפספסה את הזמן שלה לא הולכת לאיבוד. לפי אותו מדריך, המשימות נכנסות לתור ורצות בהזדמנות הבאה. כלומר: אי אפשר לדעת בדיוק מתי משימה תרוץ, אבל אפשר לדעת שהיא תרוץ בסוף.

למה וורדפרס בנוי כך? כי הוא צריך לעבוד גם באחסון משותף, שבו לרוב אין גישה למתזמן המשימות של השרת (cron). זו פשרה שמאפשרת לכל אתר וורדפרס לתזמן משימות — במחיר של דיוק.

מתי זה הופך לבעיה

  • אתר עם מעט תנועה — פוסט שתוזמן ל-8:00 בבוקר מתפרסם רק כשהגולש הראשון מגיע.
  • מטמון עמודים מלא — כשהעמודים מוגשים מהמטמון, ממטמון קבצים סטטי או מ-CDN, הבקשה לא תמיד מגיעה ל-PHP, ולכן גם לא מפעילה את WP-Cron. אתר מהיר מאוד עם מטמון אגרסיבי עלול "לשכוח" משימות. על שכבות המטמון — במאמר מטמון באתר.
  • אתר עם הרבה תנועה ומשימות כבדות — הבדיקה רצה כל הזמן, ומשימה כבדה (ייבוא, סנכרון, שליחת מיילים) יכולה לרוץ בדיוק בזמן עומס.
  • חסימת בקשות פנימיות — WP-Cron מפעיל את עצמו בבקשה מהאתר לעצמו. אם חומת אש, הגנת סיסמה על כל האתר או הגדרת DNS שגויה חוסמות את הבקשה הזו, המשימות לא רצות בכלל. כלי "בריאות האתר" בלוח הבקרה מתריע על בעיה כזו.

הפתרון: להעביר את ההפעלה למתזמן של השרת

כשיש גישה ל-cron בשרת — כמו ברוב שרתי ה-VPS והענן — אפשר לנתק את WP-Cron מטעינות העמוד ולהפעיל אותו לפי שעון אמיתי. המדריך הרשמי מתאר שני צעדים.

1. מכבים את ההפעלה בטעינת עמוד, בקובץ wp-config.php:

define( 'DISABLE_WP_CRON', true );

2. מגדירים משימה בשרת שקוראת לקובץ wp-cron.php במרווח קבוע. הדוגמה מהמדריך, כל 15 דקות:

*/15 * * * * wget --delete-after https://example.co.il/wp-cron.php

המדריך לא קובע מרווח אחד נכון — הוא תלוי במשימות. לאתר עם פוסטים מתוזמנים, כמה דקות הן מרווח סביר; לאתר בלי משימות דחופות, גם רבע שעה מספיקה. בשרתים עם WP-CLI אפשר להריץ במקום זה את המשימות שהגיע זמנן ישירות, בלי בקשת HTTP:

*/5 * * * * cd /path/to/site && wp cron event run --due-now

חשוב: ברגע שמכבים את WP-Cron, חייבים לוודא שהמשימה בשרת באמת רצה. אחרת שום משימה מתוזמנת לא תרוץ — לא פרסום, לא עדכונים, לא גיבויים של תוספים.

איך בודקים מה מתוזמן

  • WP-CLI: wp cron event list מציג את כל המשימות, מתי ירוצו ומה המרווח שלהן.
  • תוסף לצפייה במשימות — כמו WP Crontrol — מאפשר לראות ולהריץ משימות מלוח הבקרה. שימושי לאבחון, ולא חייב להישאר מותקן.
  • משימות יתומות: תוספים שהוסרו משאירים לפעמים משימות שממשיכות לרוץ. כדאי לעבור על הרשימה פעם בתקופה.

פוסט מתוזמן לא פורסם: מה בודקים

  1. האם הגדרת אזור הזמן באתר נכונה (הגדרות ← כללי)? שעון ישראל שגוי הוא סיבה נפוצה.
  2. האם DISABLE_WP_CRON מוגדר — ואם כן, האם המשימה בשרת קיימת ורצה?
  3. האם "בריאות האתר" מתריעה על בעיה בבקשות פנימיות (loopback)?
  4. האם כל העמודים מוגשים ממטמון שלא מגיע ל-PHP?

אם המשימות לא רצות בגלל שגיאה ב-PHP — למשל תוסף שקורס בזמן הריצה — המקום לבדוק הוא יומן השגיאות. על זה כתבתי בשגיאה קריטית בוורדפרס.

שאלות נפוצות

האם WP-Cron מאט את האתר?

בדרך כלל ההשפעה קטנה, כי הבדיקה מהירה והמשימות רצות בבקשה נפרדת. באתרים עמוסים עם משימות כבדות, מעבר למתזמן של השרת מוריד עומס ומאפשר לדעת מראש מתי משימות רצות — בזמן קבוע, ולא באמצע שעת עומס.

אפשר להשתמש בשירות חיצוני במקום cron בשרת?

כן — יש שירותים שקוראים לכתובת wp-cron.php לפי לוח זמנים. זה פתרון סביר באחסון משותף בלי גישה ל-cron, כל עוד מוודאים שהבקשה לא נחסמת.

משימות מתוזמנות לא רצות, או שהאתר צריך תשתית יציבה יותר לייבוא וסנכרון? בעמוד תחזוקת אתרים מפורט מה אני בודק באתרים שאני מתחזק, ואפשר לפנות אליי.

אהבתם את המאמר?

בואו נבנה יחד!

מתכננים אתר חדש, פורטל, חנות או מערכת ניהול תוכן? ספרו לי על הפרויקט, ואחזור אליכם בעצמי. אני מתחיל תמיד בהבנת הצרכים העסקיים והטכניים — ורק אז ממליץ על הפתרון הנכון.

חיפוש באתר