תוכן עניינים:

סקריפט מוניטור שירות לשרתי לינוקס: 4 שלבים
סקריפט מוניטור שירות לשרתי לינוקס: 4 שלבים

וִידֵאוֹ: סקריפט מוניטור שירות לשרתי לינוקס: 4 שלבים

וִידֵאוֹ: סקריפט מוניטור שירות לשרתי לינוקס: 4 שלבים
וִידֵאוֹ: הרפתקאות בבש - נמר - PiHole (חוסם פרסום) - נטדאטה 2024, נוֹבֶמבֶּר
Anonim
סקריפט מוניטור שירות לשרתי Linux
סקריפט מוניטור שירות לשרתי Linux

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

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

שלב 1: שימוש בשיטות הניתנות על ידי Systemd

כפי שאתה כבר יודע, רוב מערכות ההפעלה המודרניות של לינוקס משתמשות ב- systemd.

אם אינך מכיר את systemd, זהו, על פי ויקיפדיה:

"… מערכת init המשמשת בהפצות לינוקס לאתחול שטח המשתמש וניהול כל התהליכים לאחר מכן, במקום מערכות ה- init של UNIX System V או Berkeley Software Distribution (BSD)."

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

www.tecmint.com/systemd-replaces-init-in-l…

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

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

[יחידה] תיאור = תיאור applicationDocumentation = https://wikipedia.org/ After = local-fs.target network.target [Service] Type = simpleExecStart =/usr/sbin/applicationExecReload =/usr/sbin/application reloadExecStop =/ usr/sbin/application stopRestart = תמיד [התקנה] WantedBy = multi-user.target

מקם אותם בקובץ application.service בתיקייה/lib/systemd/system.

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

access.redhat.com/documentation/en-US/Red_…

כדי להפעיל את היישום שלך, הנח את הפקודה הבאה:

sudo systemctl הפעל את application.service

הערה: ניתן להשמיט את סיומת.service.

כדי לעצור את היישום:

sudo systemctl עצור application.service

אם קובץ התצורה השתנה וברצונך לטעון מחדש את ההגדרות:

sudo systemctl טען מחדש application.service

כדי להפעיל מחדש את היישום:

sudo systemctl הפעלה מחדש של application.service

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

sudo systemctl אפשר application.service

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

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

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

אם אתה מציב

RestartSec = 30

לאחר הוראת ההפעלה מחדש, היא תחכה 30 שניות לפני שתנסה להפעיל מחדש את התהליך. זה עשוי להיות שימושי, שכן ניסיון הפעלה מחדש רציף של שירות/יישום כושל יכול להוביל לביקוש גבוה במערכת (כתיבת יומני שגיאות וכו ')

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

כאן יועילו התסריטים מההנחיה הזו.

שלב 2: הגדרה ושימוש בסקריפטים של בודק השירותים

אם אתה צריך יותר שליטה בתהליכים/בשירותי הריצה שלך, סקריפטים אלה יעזרו, ללא ספק.

מכיוון שהקוד מעט גדול, הוא מועלה ל- github וניתן למצוא אותו במאגר הבא:

github.com/trex2000/Service-Monitor-Scripts/blob/master/checkService.sh

'הלב' של החבילה כולה הוא

checkService.sh

לפני השימוש בו, עליך להחליף את הנתיב המלא לתיקיית השירות. ניתן למצוא זאת בתחילת התסריט.

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

הוא עובר כל קבצים מתוך תיקיית המשנה /services עם הרחבות.serv או.check ותבדוק אם יש תהליך פעיל שנקרא 'יישום'.

אם אין קובץ '.check' עבור יישום, רק קובץ application.serv:

אם התהליך פעיל, הוא יחשב את התהליך כפעיל

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

יישום הפעלה מחדש של systemctl

אם קובץ.serv ריק!

אם קובץ.serv אינו ריק ובעל זכויות הפעלה, הוא ינסה להריץ אותו כסקריפט BASH רגיל.

זה שימושי אם צריך לעשות משהו נוסף מלבד הפעלה מחדש של השירות.

לדוגמה, בקובץ spamd.serv, מתוך המאגר לעיל, במקרה ששירות ה- spamd מת, יש להפעיל את שירות spamassassin במקום זאת, אשר יפעיל גם את spamd. הפעלה מחדש של spamd בלבד לא תספיק.

אפשר לערוך את התוכן של קובץ serv כזה בהתאם לצרכים.

דוגמה נוספת היא הקובץ pcscd.serv. במקרה זה הופעלו/נהרגו גם מספר תהליכים אחרים.

אם יש קובץ צ'ק, לאחר בדיקה אם התהליך פועל, הוא יפעיל גם קובץ סקריפט זה לביצוע בדיקות נוספות.

לדוגמה, עבור שירות oscam, יצרנו קובץ צ'ק שמנסה להתחבר לממשק האינטרנט שלו כדי לראות אם הוא מצליח. אם לא, למרות שהתהליך פעיל, השירות אינו מגיב וצריך להפעיל אותו מחדש. הפעלה מחדש של השירות חייבת להתבצע/להתקשר על ידי קובץ ה-.check עצמו.

דוגמא נוספת תהיה שירות ה- DLNA של מדיאטומב.

זהו שרת קטן המספק תוכן וידאו/שמע ללקוחות DLNA ומשדר את עצמו ברשת. לפעמים השירות נתקע ואינו יכול לגלות יותר, אך התהליך עדיין יהיה פעיל. כדי לבדוק אם השירות ניתן לגילוי, נעשה שימוש בכלי השירות CLI בשם gssdp-discover. כל הקוד הבודק את שרת DLNA הונח בתוך סקריפט mediatomb.check.

אלו הן רק דוגמאות בודדות כיצד תוכל להשתמש בקבצי.serv ו-.check.

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

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

כמובן, סקריפט.sh צריך להיות מופעל מעת לעת, ולכן יש ליצור גם עבודת cron עבורו:

#בדוק שירותי הפעלה כל 5 דקות */5 * * * * /var/bin/ServiceCheck/checkService.sh>/dev/null

שלב 3: מחשבות אחרונות

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

אל תהסס להעלות סקריפטים נוספים ל- github, אם אתה יוצר חדשים. רק הודע לי ואוסיף אותך כתורם.

מוּמלָץ: