במערכת Linux, שירותים (נקראים גם דמונים) משמשים בתפקיד חיוני בטיפול במגוון משימות כגון אירוח אתרים, ניהול מסדי נתונים ורשתות. אך ייתכן ששירותים יפסיקו לעבוד עקב שגיאות, שימוש גבוה במשאבים או כשלים במערכת בלתי צפויים.
כדי למנוע זמן ריצה ולהבטיח פעולות חלקות, מנהלי מערכות יכולים להגדיר שירותים להתחל מחדש באופן אוטומטי בכל פעם שהם נכשלים, מה שמיוחדות במיוחד לשרתי אינטרנט (Apache, Nginx), מסדי נתונים (MySQL, PostgreSQL) או אפליקציות קריטיות אחרות שחייבות להיות זמינות בכל עת.
במדריך זה, נסביר כיצד להשתמש ב־systemd כדי להגדיר שירות Linux להתחל מחדש באופן אוטומטי במקרה שהוא עוצר.
למה להפעיל מחדש שירות באופן אוטומטי?
ישנם מספר סיבות להפעלת התחלה מחדש אוטומטית של שירות ב־Linux:
- למזער זמן ריצה: אם שירות מפסיק באופן בלתי צפוי, ההתחלות האוטומטיות מבטיחות כי המשתמשים יחוו תקלה מינימלית.
- שיפור אמינות: שירותים כמו שרתי אינטרנט, מסדי נתונים ותהליכי רקע צריכים לרוץ תמיד.
- הפחתת עבודה ידנית: ללא אוטומציה, תצטרך לבדוק שירותים בתדירות ולהפעיל אותם מחדש באופן ידני אם הם נכשלים.
- טיפול בכשלים בלתי צפויים: אם שירות קורס עקב באגים בתוכנה, מגבלות משאבים, או שגיאות במערכת, ה־systemd יכול לאתחל אותו מחדש בלי התערבות מנהל מערכת.
עכשיו, בואו נעבור על השלבים להגדרת אתחול אוטומטי באמצעות systemd.
שלב 1: זהות השירות שברצונכם לאתחל מחדש
לפני שתבצעו שינויים, עליכם לדעת את השם המדויק של השירות שתרצו להגדיר על ידי רישום כל השירותים הפועלים.
systemctl list-units --type=service --state=running

אם כבר יש לכם את שם השירות, תוכלו לבדוק את מעמדו.
systemctl status apache2

החליפו את apache2
בשם השירות הממשי שברצונכם לנהל.
שלב 2: עריכת תצורת השירות
Systemd מאפשר לכם לשנות את ההתנהגות של השירות באמצעות קבצי תצורה מותאמים אישית. במקום לשנות הגדרות ברמת המערכת (שעשויות להיות מוחקות במהלך עדכונים), נשתמש ב־systemctl edit
כדי ליצור קובץ עקיפה.
הריצו את הפקודה הבאה:
systemctl edit apache2
זה יפתח קובץ ריק בעורך טקסט המוגדר כברירת מחדל.
אם הקובץ אינו ריק, תראו הגדרות קיימות שתוכלו לשנות. אחרת, תצטרכו להוסיף את ההגדרות לאתחול הנדרשות.

שלב 3: הוספת הגדרות התאום לאתחול של systemd
בעורך, הוסיפו את השורות הבאות.
[Service] Restart=always RestartSec=5s
הסבר על ההגדרות הללו:
Restart=always
– מבטיח שהשירות יתחיל מחדש כל פעם שהוא נעצר, ללא קשר לסיבה.RestartSec=5s
– אומר ל־systemd להמתין 5 שניות לפני שהוא יחל להפעיל מחדש את השירות, וכך יכול למנוע לופים מהירים של התחלה מחדש במקרה של כשלים חוזרים.
לאחר הוספתם, שמור וסגור את הקובץ.

לאחר שערכת שינויים בשירות של systemd, עליך לטעון מחדש את systemd ולהפעיל מחדש את השירות כדי לוודא שהגדרת התצורה החדשה תחול:
sudo systemctl daemon-reload sudo systemctl restart apache2
כדי לאשר שהשירות מוגדר כעת להתחיל מחדש באופן אוטומטי, הפעל:
sudo systemctl show apache2 | grep Restart
אם הכל מוגדר כראוי, תראה:
Restart=always
שלב 4: בדיקת ההפעלה האוטומטית ב־Linux
כדי לוודא שהתצורה עובדת, תוכל לעצור את השירות באופן ידני ולבדוק אם הוא מתחיל מחדש.
sudo systemctl stop apache2
המתן 5 שניות ואז בדוק את המעמד שלו.
sudo systemctl status apache2
אם השירות פועל שוב, ההפעלה האוטומטית עובדת!
אפשרויות הפעלה מחדש נוספות
לפי הצורך שלך, systemd מספקת מדיניות הפעלה מחדש שונה:
Restart=always
– השירות תמיד מתחיל מחדש, גם אם נעצר באופן ידני.Restart=on-failure
– מפעיל מחדש רק אם השירות נסגר עם שגיאה (אך לא אם נעצר באופן ידני).Restart=on-abnormal
– מפעיל מחדש את השירות אם קריסה בשירות נגרמת על ידי אות (כמו פשע זיכרון).Restart=on-watchdog
– מפעיל מחדש את השירות אם הוא נכשל בעת פעילותו.
ניתן להחליף Restart=always
עם אחת מהאפשרויות הבאות בהתאם לדרישות שלך.
איך לבדוק לוגים של שירותים לבעיות
אם שירות ממשיך לנכשל, כדאי לבדוק את הלוגים באמצעות הפקודה journalctl, שתציג את הלוגים של השירות מה 10 הדקות האחרונות.
journalctl -u apache2 --since "10 minutes ago"
לזרימת לוג בזמן אמת, השתמש ב:
journalctl -u apache2 -f
סיכום
הגדרת הפעלות אוטומטיות עבור שירותים שממשיכים לנכשל מבטיחה כי יישמרו היישומים הקריטיים בלעדי עזרה ידנית. על ידי השימוש באפשרויות האתחול של systemd, ניתן להפחית את זמן העצירה, לשפר את יציבות המערכת, ולהפחית את הצורך באיתור תקלות ידני.
Source:
https://www.tecmint.com/automatically-restart-service-linux/