كيفية تشغيل أو تكرار أمر 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

في هذا البرنامج التعليمي، ستتعلم تقنيات برمجة بسيطة لمراقبة أو متابعة أمر معين في حالة التشغيل المستمرة بشكل مماثل لأمر أعلى (مراقبة العملية واستخدام الذاكرة بشكل مستمر) كل 3 ثوانٍ افتراضيًا.

لنتوقف عند مناقشة الأسباب التي تستدعي تشغيل الأوامر بهذا التكرار. أعتقد أن لدى الجميع أسباب مختلفة لذلك في أعمالهم اليومية أو حتى على أجهزة الكمبيوتر الشخصية وأجهزة الكمبيوتر المحمولة.

1. استخدم أمر watch

Watch هو أمر في نظام Linux يسمح لك بتنفيذ أمر أو برنامج بانتظام ويعرض لك النتائج على الشاشة. هذا يعني أنه ستتمكن من رؤية نتائج البرنامج في الوقت المناسب. بشكل افتراضي، يقوم watch بإعادة تشغيل الأمر/البرنامج كل 2 ثانية. يمكن تغيير الفاصل الزمني بسهولة لتلبية متطلباتك.

مراقبة استخدام الذاكرة

“Watch” سهل للغاية في الاستخدام، لاختباره، يمكنك تشغيل وحدة تحكم Linux على الفور وكتابة الأمر التالي:

# watch free -m

سيقوم الأمر أعلاه بفحص ذاكرة النظام الحرة وتحديث نتائج أمر الحرة كل ثانيتين.

Monitor Memory Usage in Linux

كما هو موضح في الناتج أعلاه، لديك رأس، يعرض معلومات حول (من اليسار إلى اليمين) فاصل التحديث، الأمر الذي يتم تنفيذه والوقت الحالي. إذا كنت ترغب في إخفاء هذا الرأس، يمكنك استخدام الخيار -t.

السؤال المنطقي التالي هو – كيفية تغيير فاصل التنفيذ. لهذا الغرض، يمكنك استخدام الخيار -n، الذي يحدد الفاصل الزمني الذي سيتم تنفيذ الأمر به. يتم تحديد هذا الفاصل الزمني بالثواني. لذلك دعنا نقول أنك تريد تشغيل ملف script.sh الخاص بك كل 10 ثوانٍ، يمكنك القيام بذلك بهذه الطريقة:

# watch -n 10 script.sh

لاحظ أنه إذا قمت بتشغيل الأمر كما هو موضح أعلاه، ستحتاج إلى الانتقال إلى الدليل (تعلم تعلم 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 غالبًا لتصحيح النصوص الخاصة بالقواعد النصية، لكن له العديد من الأغراض الأخرى المفيدة أيضًا. على سبيل المثال، عند الجمع بين for أو while loops، يمكنك الحصول على نتائج رائعة.

إذا كنت جديدًا في كتابة النصوص الخاصة بـ 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

سيعمل الأمر أعلاه حتى يتم قتله أو مقاطعته من قبل المستخدم. يمكن أن يكون مفيدًا إذا كنت بحاجة إلى تشغيل أمر يعمل في الخلفية ولا تريد الاعتماد على cron.

مهم: عند استخدام الأساليب أعلاه ، يُنصح بشدة بتعيين فترة طويلة بما يكفي لإعطاء الوقت الكافي لأمرك لإكمال التشغيل ، قبل التنفيذ التالي.

الخاتمة

العينات في هذا البرنامج التعليمي مفيدة ، لكنها ليست مخصصة لاستبدال تمامًا عامل cron. منك أن تجد أيهما يناسبك أكثر ، ولكن إذا كان علينا تقسيم استخدام كل تقنية ، فأود أن أقول هذا:

  1. استخدم cron عندما تحتاج إلى تشغيل الأوامر بشكل دوري حتى بعد إعادة تشغيل النظام.
  2. استخدم الأساليب الموضحة في هذا البرنامج/النصوص البرمجية التي تهدف إلى العمل داخل جلسة المستخدم الحالية.

كالعادة، إذا كان لديك أي أسئلة أو تعليقات، فلا تتردد في تقديمها في قسم التعليقات أدناه.

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