המדריך המלא ל-systemd — מנהל השירותים של לינוקס המודרני
איך להפוך כל סקריפט לשירות שעולה אוטומטית, מתחזק את עצמו ומפיק לוגים — ב-25 שורות INI
systemd הוא מנהל התהליכים והשירותים של רוב הפצות לינוקס המודרניות (Ubuntu, Debian, CentOS, Fedora, Arch — כולן). בלי systemd, כל פעם שאתם רוצים להריץ סקריפט שיעלה אוטומטית בכל boot, יקום מחדש אם נפל, ויקבל הגבלות זיכרון/CPU — הייתם צריכים לכתוב הרבה קוד מלוכלך עם cron, screen, supervisord ו-init.d. עם systemd, כל זה הופך לקובץ טקסט קטן בסגנון INI של 10-20 שורות, ופקודה אחת. אצלי (אלעד) על ה-Hetzner VPS, systemd מנהל את כל 13 סוכני המיקרו-שירותים שלי: כל אחד הוא systemd unit נפרד, מתחיל אוטומטית, מתעד לוגים מרכזיים ב-journalctl, ומתחיל מחדש לבד אם הוא קורס. בנוסף, systemd-timer מחליף לי את cron עם סינטקס ברור יותר והיסטוריית הפעלות, ו-systemd-resolved מטפל ב-DNS. הוא לא הכלי הפופולרי ביותר בקרב חובבי 'Unix פילוסופיה' (יש מי שאוהב init scripts קלאסיים), אבל המציאות היא שאם אתם בעולם לינוקס בייצור — אתם משתמשים ב-systemd. המדריך הזה יראה לכם את החלק שבו תשתמשו ב-90% מהזמן: יצירת service units, ניהול דרך systemctl, וקריאת לוגים ב-journalctl.
מה המדריך מכסה
מה זה systemd? המנהל של התהליכים
PID 1 — התהליך הראשון, האחראי על כל השאר
systemd הוא מה שלינוקס מריץ ראשון אחרי שהליבה (kernel) עולה — הוא תהליך מספר 1 (PID 1), והאחריות שלו היא להעלות את כל שאר השירותים שהשרת צריך. ה'init system' הקלאסי הוחלף בהדרגה ב-systemd ברוב ההפצות מ-2015 ואילך, והוא מציע הרבה יותר מסתם 'הפעל סקריפטים בסדר X': ניהול תלויות בין שירותים, מקביליות (services שלא תלויים זה בזה עולים יחד), בדיקות בריאות אוטומטיות, גבולות משאבים, וניהול לוגים מרכזי. הוא שנוי במחלוקת בקהילת לינוקס (יש שטוענים שהוא 'גדול מדי' ופוגע בפילוסופיית Unix), אבל בפועל — הוא מה שתפגשו על כל שרת ייצור.
Service Unit: הקובץ שמגדיר שירות
20 שורות שהופכות סקריפט לתשתית
Service unit הוא קובץ INI פשוט שמתאר איך להריץ את השירות שלכם. שלוש סקציות עיקריות: [Unit] (תיאור ותלויות), [Service] (איך להריץ — פקודה, משתמש, restart policy), ו-[Install] (איפה ב-boot order להפעיל). אצלי כל אחד מ-13 הסוכנים מוגדר בקובץ כזה ב-`/etc/systemd/system/`.
systemctl: הפקודות שתשתמשו בהן בכל יום
start, stop, status, enable, disable
systemctl היא ה-CLI לניהול systemd. רוב מה שתעשו הן פקודות פשוטות מאוד שתחזרו עליהן עשרות פעמים ביום. הנה הסט שמספיק ל-95% מהזמן.
journalctl: לוגים מרכזיים, חיפוש מהיר
כל הלוגים של כל השירותים — במקום אחד, עם שאילתות
journalctl הוא הכלי לקריאת הלוגים ש-systemd אוסף. כל מה שהשירותים שלכם כותבים ל-stdout או stderr נכנס לשם אוטומטית, יחד עם metadata עשיר (timestamp מדויק, PID, יחידה, משתמש). אפשר לחפש לפי כל אחד מהם, לסנן זמנים, לעקוב בזמן אמת — וכל זה בכלי אחד.
Timers: ה-cron של 2026
תזמון משימות עם היסטוריה, נראות וטוב יותר מ-cron
systemd-timers הם החלופה המודרנית ל-cron. במקום קובץ יחיד עם syntax עתיק (`* * * * *`), כל משימה מתוזמנת היא שני קבצים: `myjob.service` (מה לעשות) ו-`myjob.timer` (מתי). היתרונות על cron: היסטוריה מלאה (`journalctl -u myjob.timer`), restart אם נכשל, ויכולות מתקדמות כמו 'הפעל פעם בשבוע ב-2 לפנות בוקר, רק אם השרת היה למעלה אז'.
מתקדם: sandboxing, resource limits וסודות
הופך את systemd לתחליף קל ל-Docker בהרבה מקרים
אחת התכונות המודרניות של systemd היא היכולת לבודד שירותים בלי Docker — דרך מנגנונים של הליבה (namespaces, cgroups, capabilities). אם הפרויקט שלכם לא דורש containerization מלא (אין צורך לבנות image, לשתף עם אחרים), systemd יכול לתת לכם 80% מהבידוד של Docker בכמה שורות.
