מקראי systemd: עבודה עם שירותים, יחידות ויומן

הקדמה

בשנים האחרונות, ההפצות של Linux עברו באופן מתמד ממערכות init אחרות ל־systemd. חבילת הכלים של systemd מספקת מודל init מהיר וגמיש לניהול של שרת שלם מהאתחול ואילך.

במדריך זה, נספק לך סקירה מהירה של הפקודות החשובות ביותר שתרצה לדעת לניהול של שרת המופעל על systemd. אלו צריכות לעבוד על כל שרת שמיישם systemd (כל גרסת מערכת ההפעלה ב Ubuntu 15.04 או מעלה, Debian 8, CentOS 7, Fedora 15). בואו נתחיל.

ניהול יחידות בסיסיות

העצם הבסיסי שה־systemd ניהל ופועל עליו הוא "יחידה". יחידות יכולות להיות מסוגים שונים, אך הסוג הנפוץ ביותר הוא "שירות" (מסומן בקובץ יחידה המסתיים ב־.service). כדי לנהל שירותים על שרת מופעל על systemd, הכלי העיקרי שלנו הוא הפקודה systemctl.

כל הפקודות הרגילות של מערכת init יש להן פעולות שקולות עם הפקודה systemctl. נשתמש ביחידת השירות nginx.service כדי להדגים (תצטרכו להתקין את Nginx עם מנהל החבילות שלכם כדי לקבל קובץ שירות זה).

לדוגמה, אנו יכולים להתחיל את השירות על ידי קלידה:

  1. sudo systemctl start nginx.service

ניתן לעצור את זה שוב על ידי הקלדת:

  1. sudo systemctl stop nginx.service

כדי לאתחל את השירות, ניתן להקליד:

  1. sudo systemctl restart nginx.service

כדי לנסות לטעון מחדש את השירות מבלי להפריע לפעילות רגילה, ניתן להקליד:

  1. sudo systemctl reload nginx.service

הפעלת או השבתת יחידות

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

כדי לאפשר לשירות להתחיל אוטומטית בעת האתחול, הקלד:

  1. sudo systemctl enable nginx.service

אם ברצונך לנטרל שוב את השירות, הקלד:

  1. sudo systemctl disable nginx.service

קבלת מבט על מצב המערכת

יש הרבה מידע שאפשר לקבל משרת systemd כדי לקבל מבט על מצב המערכת.

לדוגמה, כדי לקבל את כל קבצי היחידות ש-systemd מציין כ"פעילים", הקלד (אפשר להשאיר מחוץ לזה את ה־list-units מאחר וזהו התנהגות ברירת המחדל של systemctl):

  1. systemctl list-units

לרשימת כל היחידות שטען או שניסה לטעון systemd לזיכרון, כולל אלה שאינם פעילים כרגע, הוסף את המתג --all:

  1. systemctl list-units --all

לרשימת כל היחידות שמותקנות במערכת, כולל אלה שלא systemd ניסתה לטעון לזיכרון, הקלד:

  1. systemctl list-unit-files

צפייה במידע בסיסי של יומן השגיאות

A systemd component called journald collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.

לצפייה בכל רשומות היומן, החל מהרשומה הכי ישנה, הקלד:

  1. journalctl

בברירת המחדל, זה יציג לך רשומות מהזיכרונות הנוכחיים והקודמים אם journald מוגדר לשמור רשומות קודמות של הזיכרון. מספר ההפצות מאפשרות זאת כברירת מחדל, בעוד אחרות אינן (כדי לאפשר זאת, ערוך את קובץ ה- /etc/systemd/journald.conf והגדר את האפשרות Storage= ל"persistent", או צור את התיקייה הקבועה על ידי הקלדת sudo mkdir -p /var/log/journal).

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

  1. journalctl -b

לצפייה רק בהודעות הליבה, כגון אלה שנצטטות typicallם ב- dmesg, תוכל להשתמש בדגל -k:

  1. journalctl -k

שוב, תוכל להגביל זאת רק להפעלה הנוכחית על ידי הוספת הדגל -b:

  1. journalctl -k -b

שאילתת מצב יחידות ויומנים

בעוד הפקודות הנ"ל נתנו לך גישה למצב הכללי של המערכת, תוכל גם לקבל מידע על מצבם של יחידות פרטיות.

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

  1. systemctl status nginx.service

כדי לראות את כל ערכי היומן עבור היחידה בפועל, נתן את האפשרות -u עם שם היחידה לפקודת journalctl:

  1. journalctl -u nginx.service

כפי שתמיד, תוכל להגביל את הערכים להפעלה הנוכחית על ידי הוספת הדגל -b:

  1. journalctl -b -u nginx.service

בדיקת יחידות וקבצי יחידות

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

A unit file contains the parameters that systemd uses to manage and run a unit. To see the full contents of a unit file, type:

  1. systemctl cat nginx.service

כדי לראות את עץ התלות של יחידה (אילו יחידות systemd ינסה להפעיל כאשר מתחילים את היחידה), הקלד:

  1. systemctl list-dependencies nginx.service

זה יציג את היחידות התלויות, עם היחידות target מורחבות באופן רקורסיבי. כדי להרחיב את כל היחידות התלויות באופן רקורסיבי, עבור עם הדגל --all:

  1. systemctl list-dependencies --all nginx.service

לבסוף, כדי לראות את הפרטים ברמה הנמוכה של הגדרות היחידה במערכת, ניתן להשתמש באפשרות show:

  1. systemctl show nginx.service

זה יעניק לך את ערכו של כל הפרמטרים שניהפקים על ידי systemd.

שינוי קבצי יחידות

אם יש צורך לבצע שינוי בקובץ יחידה, systemd מאפשר לך לבצע שינויים מהפקודה systemctl עצמה כך שאין צורך לעבור אל מיקום הדיסק הממשי.

כדי להוסיף קטע קובץ יחידה, שניתן להשתמש בו כדי להוסיף או לשכפל הגדרות בקובץ היחידה המקורי, פשוט קרא לאפשרות edit על היחידה:

  1. sudo systemctl edit nginx.service

אם אתה מעדיף לשנות את כל תוכן קובץ היחידה במקום ליצור קטע, עבור עם הדגל --full:

  1. sudo systemctl edit --full nginx.service

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

  1. sudo systemctl daemon-reload

שימוש ביעדים (Runlevels)

עוד פונקציה של מערכת ההפעלה היא להעביר את השרת עצמו בין מצבים שונים. מערכות init מסורתיות כלל מתייחסות אליהם כ"runlevels", מאפשרות למערכת להיות ברמה מסוימת בכל עת.

ב־systemd, משתמשים ב-"targets" במקום זאת. מטרות הן בגדול נקודות סנכרון שהשרת יכול להשתמש בהן כדי להביא את השרת למצב מסוים. קבצי שירות ויחידות אחרות יכולים להיות קשורים למטרה ומספר מטרות יכולות להיות פעילות באותו זמן.

כדי לראות את כל המטרות הזמינות במערכת שלך, הקלד:

  1. systemctl list-unit-files --type=target

כדי לצפות במטרת ברירת המחדל ש־systemd מנסה להשיג בעת ההפעלה (שבתורה מפעילה את כל קבצי היחידות שמהווים את עץ התלות של אותה מטרה), הקלד:

  1. systemctl get-default

ניתן לשנות את המטרה הברירת מחדל שתשמש בעת ההפעלה על ידי שימוש באפשרות set-default:

  1. sudo systemctl set-default multi-user.target

כדי לראות אילו יחידות קשורות למטרה, ניתן להקליד:

  1. systemctl list-dependencies multi-user.target

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

  1. sudo systemctl isolate multi-user.target

עצירת או הפעלה מחדש של השרת

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

  1. sudo systemctl poweroff

אם ברצונך לאתחל את המערכת מחדש במקום זאת, ניתן לבצע זאת על ידי קלידת:

  1. sudo systemctl reboot

ניתן להפעיל במצב הצלת על ידי קלידה:

  1. sudo systemctl rescue

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

שלבים הבאים

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

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

Source:
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal