Home Linux SystemD – SysV – Upstart – Linux Services And Boot

SystemD – SysV – Upstart – Linux Services And Boot

0 comment
נהנתם מהמאמר ? שתפו אותו!

כל הזכויות שמורות לטל בן שושן – Shushan.co.il

SystemD – SysV – Upstart – Linux Services And Boot

נתחיל קצת מההתחלה, בעבר היה לCentOS 5 את SysV שאחראי על עליית השירותים והסקריפטים, לאחר מכן ב CentOS 6 שינו את זה ל upstart ואז לבסוף ב CentOS 7 שינו את זה לSystemD

אז מה כל השמות האלו אומרים? Sys v או Upstart או SystemD הם מנהלי השירותים של לינוקס, הם אחראים לעלות את כל השירותים הנחוצים למערכת הפעלה לעבוד וכל זה מיד לאחר ה Boot הם מעלים את Bash ושירותי הרשת ושירותי השפה ושירות הCLI וכו’

כעת נציג ונסביר את כל הצדדים:

Sysv Init – שוחרר ב1983 טוען את הסקריםטים ואת השירותים הנלווים לכך על פי סדר, אותם שירותים שנקראים בעולם הלינוקס דימון או Deamons הם אלו בעצם שעולים ראשונים לאחר ה Boot וממשיכים לעבוד תמיד ולספק את השירות שהם אמורים לספק, Sysv היה מיושן הוא עבד במשך 20 ומשהו שנים ברצף ולא יכל לעבוד במשימות מרובות כמו משתמשים מרובים, יצירת תיקיות או לעלות שירותים באותו הזמן ולכן היה צורך להחליפו במאמר זה נראה כיצד עבד

Upstart – הוא גם היום בשימוש נרחב שכן הוא נמצא בהפצות של לינוקס שעד לפני כמה שנים היו יוצאות רק איתו, חברת Canonical הוציאה את UPSTART והוא הוגדר להיות תואם ל Sysv שכן כל הסקריפטים והשירותים יעבדו איתו והציג צורת עבודה חדשה.

SystemD – הוא מנהל השירותים החדש ביותר וכמעט כל ההפצות יוצאות עם Systemd, מנהל זה הוא המתקדם ביותר בכך שהוא מאפשר למתכנתים ליצור תוכניות בקלות ומשתמש בשיטת הרצה בשם Systemd

 

SysV

כעת אני אשתמש ב CentOS 5.5 בדיוק, הסיבה כמובן זה שאני מעוניין להשתמש ב SysV על מנת להציג לכם את הצורה בה גרסה זו עבדה

 

[root@localhost ~]# vim /etc/inittab

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

# Default runlevel. The runlevels used by RHS are:

# 0 – halt (Do NOT set initdefault to this)

# 1 – Single user mode

# 2 – Multiuser, without NFS (The same as 3, if you do not have networking)

# 3 – Full multiuser mode

# 4 – unused

# 5 – X11

# 6 – reboot (Do NOT set initdefault to this)

#

id:3:initdefault:

# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6

כאשר המערכת עולה, היא תטען את הסקריפטים והרכיבים הבאים לפי סדר, הדגשתי למעלה את מה שיש לו # שזה אומר שזה רק טקסט המסביר על הקובץ הזה והפעולות שלו.
בתצורה זו אפשר לראות שיש סדר לטעינת הקבצים והסקריפטים מ1 עד 6 כל L מסמן Level שכן בעלייה כל שלב עולה לפי הסדר 1 2 3 4 5 6.
0 – מגדיר לכבות את הסקריפט או הרכיב אם מוגדר לעלות בשלב 0

1 – מגדיר את שלב היוזר מוד, למשל שחכתם את הסיסמא ל root, ניתן לאפס אותה על ידי כניסה למערכת שעולה עד השלב הזה, שלב 1

2 – השלב הכמעט סופי של עליית המערכת, רק ללא NFS הגדרות מערכת הקבצים.

3 – עליית השרת באופן מלא – שרת  אני מדגיש את השרת שכן זה עליית מערכת ההפעלה ללא הGUI או ה Xwin

4 – ללא שימוש (רשום לכם גם למעלה)

5 – X11 – עליית מערכת ההפעלה באופן מלא כולל ה GUI, ניתן לראות בשורה מתחת id:3:initdefault: מזה אומר? שיש GUI בשרת הזה שאני משתמש או לא? כמובן שלא אמרנו ש3 מעלה את השרת עצמו כCLI, אם רשום לכם 5 ואתם רוצים לעלות את המערכת ללא GUI אתם יכולים לשנות את זה ל3 או דרך הפקודה

קודם נקיש את הפקודה

runlevel

פקודה זו תציג באיזה רמה אנחנו נמצאים

אבל אם אתם ברמה 5 GUI יש להגדיר:

telinit 3

פקודה זו תגיד לו לעלות בשלב 3.

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

 

אם נכנס דרך WinSCP לנתיב /etc/init.d נוכל לראות ש init.d הוא למעשה סימבוליק לינק (קיצור דרך) למקום אחר, המקום האחר הוא למעשה

/etc/rc.d

נוכל גם לבדוק עם הפקודה

[root@localhost ~]# ls -l /etc/init.d

lrwxrwxrwx 1 root root 11 Jun 24 08:24 /etc/init.d -> rc.d/init.d

נכנס לנתיב זה /etc/rc.d ונבדוק מה יש בתיקייה

[root@localhost rc.d]# ls

init.d rc0.d rc2.d rc4.d rc6.d rc.sysinit

rc rc1.d rc3.d rc5.d rc.local

נוכל לראות שיש תיקיות יש את init.d, יש תיקייה בשם rc0.d ויש את התייקיה rc1.d ועוד תיקיות עם מספרים עד 6, כמו שהסברתי מקודם, תהליך עליית המערכת היא לפי סדר מ1 – 6  ולכן בכל תיקייה כזו יהיה קבצים בהתאם לסדר העלייה

 ניתן לראות בתיקייה את סדר הקבצים והופעתם.

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

למשל rc0 נוכל לראות שהקבצים מתחילים באות K, האות K מסמלת Kill שכן יש לחסל את השירותים לפי סדר למשל K02 “יחוסל” שני ואילו K95 במקום התשעים וחמש.

נעבור לrc3 בו נוכל לראות את הסקריפטים עם S בהתחלה, שכן S מסמל Start וגם פה לפי סדר אם נשנה את האות ל K אז השירות לא יעלה בשלב 3.

אבל בכל התיקיות תוכלו לראות שגם הקבצים בתוכם הם למעשה סימובליק לינק למקום אחר, לדוגמה השירות ssh, בכלל מופעל מהתיקייה init.d ושם שוכן הקובץ המקורי, רק שתיקייה זו אומרת שהוא יופעל במקום ה 55.

 

 

אם נעבור לתיקייה המקורית של init.d נוכל לראות את כל הקבצים שרצים שם

 

 

אם נקיש את הפקודה

[root@localhost rc.d]# chkconfig --list

נוכל לראות מה קורה עם כל שירות בכל שלב, ניקח למשל את השורה הזו

[root@localhost ~]# bluetooth 0:off 1:off 2:on 3:on 4:on 5:on 6:off

בשלב 2 3 4 ו5 ההוא פעיל ואילו ב 0 ו6 הוא לא פעיל (הגיוני מאוד)

כמובן שנוכל לשנות זאת על ידי כלי ייעודי שהוא הchkconfig, למשל נוכל להחליט שבשלב 4 ה bluetooth לא יעבוד

נקיש

[root@localhost ~]# chkconfig bluetooth --level 4 off

מעולה!

כעת נבדוק איזה שירותים עולים בצורה קצת שונה

נקיש את הפקודה

ntsysv

וחלון יעלה:

 

וכאן אתם יכולים לראות בדיוק את התצורה בה איזה רכיב עולה ולבטל או להגדיר שהוא יעלה בעליית המערכת.

UPstart

לאחר CentOS 5 שהיה אחרון עם מערכת SysV , מפתחי CentOS הבינו שהשיטה בה המערכת עולה רק בסדר מסוים יוצרת מצב מיושן ויש ליצור מערכת טובה יותר שמתחילה את הכל באותו זמן ובכך לעלות את המערכת מהר יותר ולכן ב CentoS 6 הם הכניסו את Upstart ואילו ב CentOS 7 הכניסו את SystemD שנדבר עליה בהמשך.

כעת אני עובר להשתמש בגרסה 6.9 של CentOS.

אני נמצא ב rc.d שנראה בדיוק כמו ב CentOS 5.5, אז בטח אתם שואלים מה ההבדל? הסיבה היא ש UPstart מנסה להתאים את עצמה גם אחורנית ל SysV ובאותו הזמן להתאים לשירותים שרוצים לעבוד תחת Upstart.

כעת נעבור לתיקייה Init שנמצאת ב /etc/init ולמעשה כאן נמצאים השירותים שהותאמו ל upstart ולכל תוכנית שעובדת עם upstart תוגדר כאן

 

בתיקייה ניתן לראות קובץ בשם rcS.conf שהוא למעשה מתאם בין UPstart לבין SysV

אם נפתח את הקובץ נוכל לראות שכתוב

# This task runs the old sysv-rc startup scripts.

והוא למעשה מכיל סקריפט שמעלה את כל הסקריפטים הישנים בדיוק כמו SysV על מנת שהם יעבדו גם במערכת ללא SysV

 

SystemD

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

לקחתי את הטבלה של פדורה, מהאתר https://fedoraproject.org/wiki/SysVinit_to_Systemd_Cheatsheet

והכנסתי לכם אותה פה

למשל, ניתן לבצע ריסט לשירות מסוים או לעצור אותו

[root@localhost ~]# systemctl start httpd

או לאפשר לו לרוץ בעליית מערכת ההפעלה

[root@localhost ~]# systemctl enable *service name*

 

נאמר אתם רוצים לחפש איזה שירות פעיל

[root@localhost ~]# systemctl list-unit-files --type=service

למשל התקנתי httpd – שירות IIS

[root@localhost ~]# yum install httpd

כעת השירות עובד, אבל האם הוא יעלה בהפעלה הבאה של מערכת ההפעלה?

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

[root@localhost ~]# systemctl list-unit-files --type=service | grep httpd

נקבל

[root@localhost ~]# httpd.service disabled

אז כעת נפעיל אותו על ידי הפקודה systemctl

[root@localhost ~]# systemctl enable httpd

ועכשיו אם נבדוק עם הפקודה systemctl list-unit-files –type=service | grep httpd

[root@localhost ~]# httpd.service enable

נערוך את

[root@localhost ~]# vim /usr/lib/systemd/system/ctrl-alt-del.target

[root@localhost ~]# /etc/systemd/system/default.target

לדוגמה נתקין httpd,

[root@localhost ~]# yum install httpd

כעת נבדוק אם השירות פעיל

 

ניתן לראות שלא

httpd.service disabled

אז כעת נאפשר את השירות

 

ניתן לראות שנקבל הערה

Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

הערה זו אומרת שsystemD יצר סימבוליק לינק ל /usr/lib/systemd/system/httpd.service ובכך ברגע שהמערכת תעשה ריסטארט היא תעלה עם httpd, נבדוק שוב

systemctl list-unit-files --type=service | grep httpd

httpd.service enabled

אם ננווט בעזרת winscp ל נראה שבתייקה /usr/lib/systemd/system/ יש קובץ בשם httpd.service

 

rc.d and init.d

בנתיב

/etc/init.d

יש לנו סימבוליק לינק שהוא init.d למעשה הוא מוביל ל

/etc/rc.d

ובתיקייה זו יש את כל הסקריפטים שעולים כאשר מערכת ההפעלה עולה.

לכן נוכל לבצע

[root@localhost ~]# ls /etc/rc.d

init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local

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

אבל זה גישה של הגרסאות הישנות יותר של centos

ה init.d החדש הוא למעשה systemctl, שהוא למעשה מריץ את הסקריטים בעליית המחשב

אם ננווט ל

/etc/systemd/system/

נגלה שגם פה חלק הקבצים הם סימבוליק לינק ל

/usr/lib/systemd/system/

מאמרים קשורים

Leave a Comment