שעון לא מדויק בשרת הוא אחת התקלות הכי שקטות וכי משבשות שיכולות לקרות לאתר וורדפרס. הוא לא מפיל את האתר באופן ברור, אבל הוא שובר בשקט מערכות שמסתמכות על הזמן: cron, חתימות, אבטחה, רפליקציה ולוגים.
למה זה משנה
וורדפרס בעצמו, וכמעט כל תוסף רציני שיושב עליו, מסתמך על שעון השרת בכמה מקומות קריטיים. WP-Cron מחליט מתי להריץ משימה לפי time() של PHP. כששעון השרת מקדים בעשר דקות, גיבוי מתוזמן ל-03:00 רץ ב-02:50; כשהוא מאחר בשעה, פוסט שתוזמן ל-09:00 לא ייצא לפני 10:00. מעבר לזה, OAuth ו-JWT מגדירים את ה-timestamp בתוך החתימה ודוחים בקשה ששעונה סוטה ביותר מ-300 שניות מהשרת השני - זו הסיבה הראשית לשגיאות "Invalid signature" מ-Stripe, Google APIs ו-Facebook Graph. תעודות SSL חדשות שיוצרות עם certbot עלולות להיכשל בולידציה אם ה-clock skew עצום. Multisite עם DB replication סובל מ-MySQL replication lag מעוות. ולבסוף, חקר תקלות נהיה כמעט בלתי אפשרי כשלוג אחד אומר 14:32 ולוג אחר באותו רגע אומר 14:38.
איך לזהות
RankPlus מבצע פינג ל-API של RankPlus, מקבל את ה-Date header של ה-HTTPS response (שמסתמך על שעון UTC מדויק) ומשווה ל-time() בשרת הוורדפרס. סטייה של מעל 30 שניות נחשבת drift. ידנית אפשר לבדוק עם הפקודה הבאה דרך SSH:
date -u && curl -sI https://www.google.com | grep -i ^dateשתי השורות צריכות להיות זהות בפחות מ-2 שניות. אם הן מתרחקות, יש drift. אפשרות נוספת: timedatectl status במערכות systemd יראה אם NTP בכלל פעיל ואם השעון מסונכרן.
איך לתקן
- אם יש לך SSH והרשאות root, הפעל סנכרון NTP מובנה:
sudo timedatectl set-ntp true. - במערכות מודרניות (Ubuntu 18+, Debian 10+) השירות שעובד מאחורי הקלעים הוא
systemd-timesyncd. הפעל אותו:sudo systemctl enable --now systemd-timesyncd. - בשרתים שמרניים יותר השתמש ב-chrony - הוא מדויק יותר וטוב יותר ל-VM שעולים וירדים:
sudo apt install chrony && sudo systemctl enable --now chronyd. - וודא ש-firewall לא חוסם NTP. הפרוטוקול משתמש ב-UDP פורט 123 outbound. ספקי VPS חדשים לעיתים חוסמים זאת כברירת מחדל ויש לפתוח ידנית.
- אם זה shared hosting ללא SSH, פתח כרטיס תמיכה: "שעון השרת אינו מסונכרן עם NTP - יש סטייה של X שניות. אנא תקנו".
- אחרי 2-5 דקות הרץ
timedatectl- השדהSystem clock synchronizedצריך להראותyes.
טעויות נפוצות
- בלבול בין timezone לבין clock: וורדפרס מציג זמן לפי הגדרת ה-timezone של האתר (Settings > General). שינוי שלה לא משנה את שעון השרת. תקן את שעון השרת ב-UTC, ואת תצוגת המשתמש בהגדרות וורדפרס בנפרד.
- שימוש ב-NTP servers ארגוניים שאינם נגישים: בדוק את הקובץ
/etc/systemd/timesyncd.conf. אם הוא מצביע ל-NTP פנימי שאין אליו גישה - יוצרים drift לאט. - VM ש-suspend ארוך: מכונה וירטואלית ש"קפאה" יכולה לחזור עם שעון שמסטה בדקות. במקרה זה הפעלת ntpd פעם אחת לא מספיקה - וודא שהוא רץ באופן רציף.
- Docker containers: container יורש את שעון ה-host. אם ה-host מסטה, כל ה-containers מסטים. תקן ב-host, לא בכל container.
בדיקה לאחר תיקון
הרץ שוב date -u והשווה ל-https://time.is או ל-curl -sI https://www.google.com | grep -i date. שתי הזמנים צריכים להיות זהים. ב-RankPlus הרץ ביקורת מחדש - הסטטוס יחזור לירוק תוך מחזור הדגימה הבא. בדוק גם משימת cron שתוזמנה לזמן קרוב - היא צריכה לרוץ בדיוק בזמן שתוזמן.