איך להריץ או לחזור על פקודת Linux כל X שניות לנצח

A system administrator often needs to run a command repeatedly in a certain periods of time. Often such tasks can be easily completed with simple cron commands. In most of the cases  this should work, but the shortest period which you can run cron command is every 1 minute. Believe it or not, in many cases this is too slow.

Run Linux Command Every Second

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

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

1. השתמש בפקודת watch

Watch היא פקודת Linux המאפשרת לך להריץ פקודה או תוכנה באופן תקופתי וגם להציג לך את הפלט על המסך. זה אומר שתוכל לראות את פלט התוכנה בזמן אמת. כברירת מחדל, watch מפעיל מחדש את הפקודה/התוכנה כל 2 שניות. המרווח יכול להשתנות בקלות על מנת לעמוד בדרישותיך.

ניטור שימוש בזיכרון

"Watch" היא קלה ביותר לשימוש, כדי לבדוק זאת, תוכל להפעיל את טרמינל ה-Linux מייד ולהקליד את הפקודה הבאה:

# watch free -m

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

Monitor Memory Usage in Linux

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

השאלה הלוגית הבאה היא – כיצד לשנות את המרווח ביצוע. למטרה זו, ניתן להשתמש באפשרות -n, המציינת את המרווח בו תבוצע הפקודה. המרווח זה מוגדר בשניות. אז נניח שתרצה להריץ את קובץ ה־script.sh שלך כל 10 שניות, תוכל לעשות זאת כך:

# watch -n 10 script.sh

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

אפשרויות נוספות שימושיות של פקודת watch הן:

  1. -b – יוצר צליל ביפ במקרה בו פלט הפקודה הוא שונה מאפס.
  2. -c – פועל על פירוש רצפי צבע ANSI.
  3. -d – מדגיש שינויים בפלט הפקודה.

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

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

# watch uptime
Watch Linux Load Average

כדי לצאת מהפקודה, לחץ על CTRL+C.

כאן, הפקודה 'uptime' תרוץ ותציג את התוצאות המעודכנות כל 2 שניות כברירת מחדל.

מעקב אחר התקדמות של פקודת ההעתקה

ב-Linux, בעת העתקת קבצים ממיקום אחד למיקום אחר באמצעות פקודת cp, לא מוצג התקדמות הנתונים, כדי לראות את ההתקדמות של הנתונים המועתקים, אפשר להשתמש בפקודת watch יחד עם פקודת du -s לבדוק את שימוש הדיסק בזמן אמת.

# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ &
# watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso 
Monitor Progress of Copy Command

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

2. השתמש בפקודת sleep

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

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

במקרה זה, אם זה הפעם הראשונה שאתה שומע על פקודת "sleep", היא משמשת להשהות משהו לזמן מוגדר. בסקריפטים, אפשר להשתמש בה כדי להגיד לסקריפט שלך להפעיל פקודה 1, להמתין 10 שניות ואז להפעיל פקודה 2.

עם הלולאות למעלה, אפשר לספר ל-bash להפעיל פקודה, להמתין N כמות שניות ולאחר מכן להריץ שוב את הפקודה.

למטה ניתן לראות דוגמאות לשתי הלולאות:

דוגמא של לולאת for

# for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done

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

הנה תוצאה דוגמא:

This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016
This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016
This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016
This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016
This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016
This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016
This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016
This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016
This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016
This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016

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

דוגמא של לולאת while

# while true; do echo -n "This is a test of while loop";date ; sleep 5; done

הנה תוצאה דוגמא:

This is a test of while loopWed Feb 17 20:52:32 EET 2016
This is a test of while loopWed Feb 17 20:52:37 EET 2016
This is a test of while loopWed Feb 17 20:52:42 EET 2016
This is a test of while loopWed Feb 17 20:52:47 EET 2016
This is a test of while loopWed Feb 17 20:52:52 EET 2016
This is a test of while loopWed Feb 17 20:52:57 EET 2016

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

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

מסקנה

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

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

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

Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/