منبع اصلی نوشتار زیر در این لینک قرار دارد

شل اسکریپت ساده برای مانیتورینگ فرایندی خاص

نوشتن یک شل اسکریپت که چک کند آیا فرایندی خاص (مانند sshd) در حال حاضر روی سیستم start است یا نه؟یک فایل به نام isupsshd.sh ایجاد می کنیم و کد هایی که در ادامه آمده را در آن وارد کنید. نمی خواهیم برنامه (فایل) را دستی اجرا کنیم، بلکه از طریق cron می خواهیم آنرا زمانبندی کنیم.از دستور های grep,ps و تعریف متغیر لازم، استفاده می کنیم.

دستور ps به صورت زیر در کد استفاده شده است.

ps ax | grep –v grep | grep $PROCESS | grep –v $SCRIPT

ps ax : تمامی فرایند های متعلق به شما را نشان می دهد. grep –v grep از لیست خروجی ها، دستور grep را حذف می کند و در نهایت لیستی که شامل دستور grep نیست به grep $PROCESS می رود و این دستور هم فقط خطی مانند زیر که شامل شناسه فرایند sshd است را نشان می دهد. آخرین بخش دستور بالا grep –v $SCRIPT است که از فهرست خروجی ps نام اسکریپت را حذف می کند. این بخش بسیار مهم است. فرض کنید، دستور را دستی اجرا کرده اید.

isupsshd.sh/.

پس یک خط در لیست خروجی دستور ps نیز ظاهر می شود. (فرایند bash مسئول اجرای اسکریپت است پس نیاز دارد یک نمونه از خودش (یک فرایند جدید) برای اجرای اسکریپت ایجاد کند و این یعنی ps همیشه خروجی دارد (حتی اگر سرویسی مانند sshd نیز غیر فعال باشد و همیشه Exit Codeبرابر یک خواهد بود.). دو متغیر به نام های PROCESS و MHOST به ترتیب نام فرایند و نام هاست ماشینی که اسکریپت روی آن اجرا می شود را نشان می دهد.

“PROCESS=”sshd

`MHOST=`hostname

دومین متغیر نتیجه اجرای دستور hostname را در متغیر MHOST ذخیره می کند. متغیر دیگر SCRIPT$ است که خروجی اجرای دستور basename $0 را ذخیره می کند.

(SCRIPT=$(basename $0

متغیر 0$ درون یک شل اسکریپت نام (مسیر) فایل را نشان می دهد. اصلی ترین بخش دستور خطوط زیر است.

اولین خط Exit Code دستور قبلی (یعنی ps) را در متغیر STATUS$ ذخیره می کند. در صورتی که دستور قبلی درست اجرا شده باشد، متغیر ?$ برابر صفر می شود و در STATUS$ ذخیره شده و ایملی برای اجرا بودن سرویس ssh (که فرایندش sshd مخفف ssh daemon ) ارسال می شود. در غیر انصورت ایملی که به مدیر می گوید که ssh غیر فعال می باشد.

کد کامل

دانلود فایل : isupsshd



برچسب ها : , , , , , , ,