نوشتن یک شل اسکریپت که چک کند آیا فرایندی خاص (مانند 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