כיצד לאתחל באופן אוטומטי שירות שנכשל בלינוקס

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

כדי למנוע זמן ריצה ולהבטיח פעולות חלקות, מנהלי מערכות יכולים להגדיר שירותים להתחל מחדש באופן אוטומטי בכל פעם שהם נכשלים, מה שמיוחדות במיוחד לשרתי אינטרנט (Apache, Nginx), מסדי נתונים (MySQL, PostgreSQL) או אפליקציות קריטיות אחרות שחייבות להיות זמינות בכל עת.

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

למה להפעיל מחדש שירות באופן אוטומטי?

ישנם מספר סיבות להפעלת התחלה מחדש אוטומטית של שירות ב־Linux:

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

עכשיו, בואו נעבור על השלבים להגדרת אתחול אוטומטי באמצעות systemd.

שלב 1: זהות השירות שברצונכם לאתחל מחדש

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

systemctl list-units --type=service --state=running
List Running Linux Services

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

systemctl status apache2
Check Running Service Status

החליפו את apache2 בשם השירות הממשי שברצונכם לנהל.

שלב 2: עריכת תצורת השירות

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

הריצו את הפקודה הבאה:

systemctl edit apache2

זה יפתח קובץ ריק בעורך טקסט המוגדר כברירת מחדל.

אם הקובץ אינו ריק, תראו הגדרות קיימות שתוכלו לשנות. אחרת, תצטרכו להוסיף את ההגדרות לאתחול הנדרשות.

Open Systemd Service Configuration File

שלב 3: הוספת הגדרות התאום לאתחול של systemd

בעורך, הוסיפו את השורות הבאות.

[Service]
Restart=always
RestartSec=5s

הסבר על ההגדרות הללו:

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

לאחר הוספתם, שמור וסגור את הקובץ.

Add Service Restart Configuration

לאחר שערכת שינויים בשירות של 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/