اطلاعیه

بستن
No announcement yet.

دستور watch - تکرار دستورات در لینوکس هر X ثانیه یکبار

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
پاک کردن همه
پست های جدید

  • دستور watch - تکرار دستورات در لینوکس هر X ثانیه یکبار

    یک مدیر سیستم اغلب باید یک دستور را بارها و بارها در یک بازه زمانی خاص اجرا کند. اغلب چنین کارهایی را میتوان با استفاده از دستورات cron به راحتی انجام داد. در بیشتر موارد این روش کار می کند،‌ اما در کوتاهترین بازه ای که شما میتوانید دستور cron را اجرا کنید هر 1 دقیقه یکبار میباشد.

    در این مقاله، شما یک اسکریپت ساده برای مانیتور یا نظارت دستورات خاص به طور مداوم و در حالت اجرا مانند دستور top (به طور مداوم مصرف مموری و پروسس ها را مانیتور میکند) برای هر 3 ثانیه یکبار به صورت پیش فرض، را یاد خواهید گرفت.



    1 - استفاده از دستور watch

    watch یک دستور لینوکسی است که به شما اجازه اجرای یک دستور یا برنامه را در فواصل معین به همراه نمایش خروجی به شما میدهد. این به این معنی است که شما میتوانید خروجی برنامه را در لحظه (به صورت ثانیه به ثانیه) مشاهده کنید. به صورت پیش فرض watch هر 2 ثانیه یکبار دستور یا برنامه ای را اجرا میکند. شما این فاصله زمانی را به راحتی میتوانید بر اساس نیازتان تغییر دهید.


    مانیتور کردن مصرف Memory

    استفاده از watch فوق العاده ساده است، برای تست آن، شما میتوانید فورا در یک ترمینال لینوکس دستور زیر را تایپ کنید.
    کد HTML:
    # watch free -m
    دستور بالا مقدار مموری آزاد سیستم شما را بررسی خواهد کرد و نتیجه یا خروجی دستور free هر 2 ثانیه یکبار آپدیت میشود.
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	watch command with free.gif نمایش ها:	0 اندازه:	90.5 KB شناسه:	26658





    همانطور که در خروجی بالا دیده میشود،‌ شما یک header از چپ به راست دارید که اطلاعاتی درباره به روز رسانی خروجی دستور free و زمان فعلی را به شما نمایش میدهد. برای مخفی کردن هدر شما میتوانید از آپشن -t استفاده کنید.

    موضوع بعدی نحوه تغییر فاصله زمانی (interval) میباشد. برای این منظور، شما میتوانید از آپشن -n استفاده کنید، که مشخص کننده فاصله زمانی است که دستور باید اجرا شود. این فاصله به ثانیه مشخص شده است. بنابراین شما میتوانید برای اجرای فایل اسکریپت script.sh هر 10 ثانیه یکبار، به صورت زیر عمل کنید.
    کد HTML:
    # watch -n 10 script.sh
    نکته : در صورت اجرای دستور بالا، شما نیاز خواهید داشت با استفاده از دستور cd به مسیر دایرکتوری اسکریپت وارد شوید، در غیر اینصورت مسیر کامل اسکرپیت را در دستور مشخص کنید.


    آپشن های مفید دیگر دستور watch :

    -b : ایجاد صدای beep اگر خروجی دستور چیزی غیر از صفر باشد.
    -c : تفسیر ترتیب رنگ ANSI.
    -d : تغییرات را در خروجی دستور highlight میکند.


    مانیتور کردن کاربران login شده،‌ uptime و load avarage

    برای مانیتور کردن خروجی کاربران login شده، uptime سرور و load avarage به طور مداوم در هر چند ثانیه یکبار، از دستور زیر استفاده کنید.
    کد HTML:
    # watch uptime
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	watch and uptime commands.gif نمایش ها:	0 اندازه:	71.0 KB شناسه:	26659




    برای خارج شدن از دستور از Ctrl+C استفاده کنید.

    در اینجا،‌ دستور uptime اجرا خواهد شد و خروجی آن هر 2 ثانیه یکبار به صورت پیش فرض آپدیت خواهد شد.


    مانیتور درصد پیشرفت اطلاعات دستور copy

    در لینوکس، هنگام کپی فایل ها از مکانی به مکان دیگر از دستور cp استفاده میشود و درصد پیشرفت اطلاعات نمایش داده نمیشود، برای نمایش درصد پیشرفت کپی اطلاعات، شما میتوانید از دستور watch به همراه دستور du -s برای چک کردن مقدار مصرف دیسک به صورت لحظه ای استفاده کنید.
    کد HTML:
    # cp ubuntu-18.10-desktop-amd64.iso /home/mohammad/ &
    # watch -n 0.1 du -s /home/mohammad/ubuntu-18.10-desktop-amd64.iso
    برای بزرگتر شدن عکس روی آن کلیک کنید  نام:	watch and cp commands.gif نمایش ها:	0 اندازه:	175.6 KB شناسه:	26660





    اگر شما فکر میکنید که دستور بالا بسیار پیچیده است، من به شما دستور copy پیشرفته را پیشنهاد میکنم، که درصد پیشرفت اطلاعات را به شما نمایش خواهد داد.



    2 - استفاده از دستور sleep

    Sleep معمولا برای دیباگ کردن شل اسکریپت استفاده میشود، اما قابلیت های مفید بسیاری هم دارد. برای مثال،‌ زمانیکه در حلقه ها، for یا while را ترکیب میکنید، شما میتوانید نتایج بسیار عالی را بگیرید.

    در صورتی که اولین بار است درباره دستور sleep میشنوید، کار آن تاخیر انداختن به میزان زمان مشخص شده، در اجرای یک دستور میباشد. در داخل اسکریپت ها، شما میتوانید از آن برای اجرای دستور 1،‌ با تاخیر 10 ثانیه ای و سپس اجرای دستور 2 استفاده کنید.

    با حلقه بالا، شما میتوانید به bash بگویید که یک دستور را اجرا کند، سپس به مقدار N ثانیه صبر کند و سپس دستور را مجدد اجرا کند.

    در زیر شما میتوانید مثالهایی از هر دو حلقه را مشاهده کنید.

    مثال برای حلقه for
    کد PHP:
    # for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done 
    در خط بالا، میخواهیم دستور echo را اجرا کرده و تاریخ فعلی آن را در مجموع 10 بار با 5 ثانیه وقفه بین هر دستور یا اجرا نمایش دهد.

    نمونه خروجی را در اینجا میتوانید مشاهده کنید.
    کد HTML:
    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
    شما میتوانید دستورات date و echo و فاصله زمانی که نیاز دارید را با دستورات یا اسکریپت خودتان و فاصله زمانی مورد نیازتان جایگزین کنید.


    مثال برای حلقه while
    کد PHP:
    # while true; do echo -n "This is a test of while loop";date ; sleep 5; done 
    نمونه خروجی :
    کد HTML:
    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
    دستور بالا تا زمان kill کردن یا قطع شدن توسط یوزر اجرا خواهد شد. اگر شما احتیاج دارید یک دستور در بک گراند اجرا شود و نمیخواهید روی cron حساب باز کنید، میتواند به صورت دستی اجرا شود.

    مهم : زمانیکه از روش بالا استفاده میکنید،‌ به شدت توصیه می شود که فاصله زمانی کافی و طولانی، تا قبل از اجرای دستور بعدی، برای اجرای دستور خود داشته باشید.


    نتیجه

    مثال هایی که در این مقاله استفاده شده کاربردی میباشد،‌ اما به این معنی نیست که میتواند به طور کامل جایگزین دستور cron شود. این به شما بستگی دارد که ببینید کدوم یک از این موارد بهتر کار میکند، اما اگر مجبور باشیم که کاربرد هر دو تکنیک را از هم جدا کنیم، باید این مورد را بگویم :
    • زمانیکه شما نیاز دارید به صورت دوره ای دستورات را اجرا کنید حتی بعد از reboot سیستم از cron استفاده کنید.
    • روش های توضیح داده شده در این مقاله برای اجرای اسکریپت ها/برنامه ها را با یوزر خودتان استفاده کنید.

    مثل همیشه،‌ اگر شما سوال یا نظری برای ارسال دارید تردید نکنید و آن را در زیر با ما مطرح کنید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 07-21-2019, 04:54 PM.
در حال انجام ...
X
کانال تلگرام منطقه لینوکسی ها