crontab – מדריך קצרצר למתחיל

הפעלת משימות מתוזמנות באמצעות cron במערכות ושרתים מבוססי לינוקס

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

ה-cron הוא בעצם daemon ששמו הוא crond. למי שלא יודע, daemon היא תוכנה שרצה ברקע של כל מערכת לינוקס. למשל httpd שהיא תהליך ברקע של שרת http. אז כך גם crond. זה ה-daemon של cron שרץ לו ברקע כל הזמן במערכת לינוקס. בחלונות יש גם משהו כזה כמובן אבל אין לי מושג מהו ובטח מגיעים אליו עם מלא ממשקים גרפיים דוחים ולא מובנים אבל בלינוקס/מק כל עבודות ה-cron מנוהלים עם CLI בשם crontab שמאפשר לנו לצפות בעבודות ה-cron, לשנות אותן ולנהל אותן. הפקודה crontab היא מלשון cron table. כי יש טבלה מסודרת להפעלת פקודות כאלו.

אנו נדגים באמצעות סקריפט bash קטן שברגע שמפעילים אותו, הוא יוצר רשומה ב-test.log. הוא נראה כך:

#!/bin/bash
#
LOGFILE=~/test.log
echo "`date +%H:%M:%S` : Working" >> $LOGFILE

אחרי שאנו נותנים הרשאות מספקות לסקריפט באמצעות chmod, אנו ננסה להפעיל אותו:

➜  ~ ./cron-demo-script.sh
➜  ~ cat test.log
12:55:31 : Working

ונראה שבאמת הוא יוצר קובץ בשם test.log ומכניס לתוכו שורה עם הזמן שבו הפעלתי אותו.

נניח שאני רוצה שהלוג הזה יעבוד כל פרק זמן מסוים. זה הזמן להשתמש ב-crontab כדי לקרוא לו. לכל משתמש במערכת יש את טבלת ה-cron שלו. גם ל-root אגב. על מנת ליצור cron, אני אקליד: crontab -e

➜  ~ crontab -e
crontab: no crontab for barzik - using an empty one
crontab: installing new cronta

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

* * * * * ~/.some-command.sh && /etc/some-other-command.sh && ~/.nvm/versions/node/v16.5.0/bin/node ~/some-node-command.js

כל מה שאנו נשים בשורה הזו ירוץ. מה האינטרוולים? אלו ה-* האלו שאתם רואים. זה הדבר הכי מלחיץ ב-cron שהמון אנשים מתייחסים אליו בתור וודו. בואו ננסה לנתח אותו:

בגדול ה-* הראשונה מיועדת לדקה.

כך למשל

10 * * * * 

זה – בכל דקה עשירית בשעה.

ה-* השניה מיועדת לשעה.

10 4 * * * 

בכל שעה 4 (AM) ועשרה.

ה-* השלישית מיועדת ליום.

10 4 3 * * 

בכל ה-3 לחודש, שעה 4 ועשרה.

ה-* הרביעית מיועדת לחודש.

10 4 3 12 * 

בכל ה-3 לדצמבר, שעה 4 ועשרה.

והכוכבים האחרונה זה ליום בשבוע. למשל – כל עשר דקות ביום ראשון (הימים מתחילים ב-0 ונגמרים ב-6)

10 * * * 0

וכמובן שאפשר ממש לחגוג עם ביטויים שונים שמשתמשים בטווח או ב-/. כמו למשל – כל חמש דקות.

1/5 * * * *

זה פשוט אחרי שמבינים, הבעיה היא שקשה להבין. מה הכי קל? ראשית יש לנו את crontub.guru שמסייע מאוד בקביעה והבנה של הוראות התזמון. ושנית יש לנו את גוגל – מספיק לגגל במרץ: "how to configure crontab to run every 3rd minutes in friday the 13th" או משהו בסגנון כדי לקבל תשובה.

במקרה שלנו, אם אנו רוצים להריץ את הסקריפט שלנו כל דקה, אנו נכניס את השורה הזו:

* * * * * ~/cron-demo-script.sh

אחרי כן נלחץ על אסקייפ, נקודתיים ו-qw כדי לשמור ולצאת. כן, זהו vi 😂

אם נלחץ על crontab -l, אנו נראה את רשימת ה-cron שיש למשתמש:

אחרי ששמרנו, זה הזמן לראות שהכל עובד. נריץ את פקודת tail -f על קובץ הלוג. הפקודה הזו מראה את חמשת השורות האחרונות וכן היא מעדכנת, בזמן אמת, כל שינוי לקובץ הלוג. אפשר לראות שכל דקה היה עדכון.

אם אנו רוצים להפטר מה-cron, אין שום בעיה, פשוט מוחקים את השורה שלא רוצים בה מ-crontab.

בונוס – למשתמשי וורדפרס

אם יש לכם וורדפרס והעדכונים האוטומטיים, תזמוני הפוסטים, גיבויים וכו' לא עובדים לכם כמו שצריך – סימן שה-cron שלכם לא מחובר. לוורדפרס יש קובץ cron שאמור להיות מחובר ל-cron. בתהליך ההתקנה של וורדפרס זה רץ אוטומטית אבל לא תמיד זה עובד או שיש בעיות אחרות של permissions. שם הקובץ הוא wp-cron.php ועל מנת להפעיל אותו אפשר להכניס ל-cron משהו כזה:

0 * * * * su daemon -s /bin/sh -c "cd /opt/bitnami/apps/wordpress/htdocs; /opt/bitnami/php/bin/php -q wp-cron.php"

כאשר /opt/bitnami/apps/wordpress/htdocs הוא הנתיב לוורדפרס שלכם בשרת וה-/opt/bitnami/php/bin/php הוא הנתיב לתוכנת ה-PHP. אפשר למצוא אותו באמצעות which php.

פוסטים נוספים שכדאי לקרוא

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

הסבר על טכניקה פשוטה וידועה מאד שאנו מפעילים על מידע לפני שאנחנו מציגים אותו ב-HTML באפליקציה או באתר.

פתרונות ומאמרים על פיתוח אינטרנט

SSG עם next

אחרי שלמדנו במאמר הקודם מה זה SSR והבנו שלא מדובר בקליע כסף שפותר את כל הבעיות שלנו, נלמד על SSG שיכול להקל על כמה מהבעיות של SSR.

גלילה לראש העמוד