سلام . در قسمت های قبلی با مفاهیم runlevel و هم چنین کار با دستور chkconfig آشنا شدیم . هم چنین با ذکر چندین مثال سویچ add و del دستور chkconfig را بررسی کردیم و چندین حالات ممکن برای سرویس ssh را بررسی کردیم . اما تمامی سرویس هایی که گفتیم , همه در سیستم وجود داشتند و فایل های اجرایی و کانفیگ آن در سیستم وجود داشت . حال فرض کنید می خواهیم یک اسکریپت کوچیک تهیه کنیم که طبق سینتکس های chkconfig باشد . یعنی علاوه بر این که در runlevel ای خاص اجرا شود , قابل مدیریت توسط ابزار chkconfig هم باشد .

فرض ها :

1. من یک اسکریپت کوچیک ریموت شل با استفاده از پایتون تهیه کردم ام که روی پورت 8000 سرویس دهی می کند : ( از اسکریپت 0x0ptim0us توسط نوشته شده است )

 

من این اسکریپت را در مسیر usr/sbin/ با نام فرضی ttb کپی می کنم . حال برای اجرای این اسکریپت کافیست به صورت زیر عمل کنیم :

اما برای مدیریت این اسکریپت کافیست یک اسکریپت دیگه ای تهیه کنیم و آن را در chkconfig اضافه کنیم . اگه اسکریپت پایتون بالا را مثل یک سرویس که روی پورت 8000 سرویس دهی می کند در نظر بگیریم . می توانیم مدیریت start و stop و status و … این سرویس را با اسفاده از chkconfig و دستور service به عهده بگیریم .

برای این منظور اسکریپت زیر را در مسیر etc/init.d/ با نام فرضی ttbd قرار می دهیم :

 


توضیح اسکریپت بالا :

1. به خطوط 04 و 09 و 14 و 25 توجه کنید . پس می توان نتیجه گرفت با 3 آپشن start و stop و status رو به رو هستیم .

2. اگر به خط 02 توجه کنید عبارت chkconfig: 5 23 55 مواجه خواهید شد . این عبارت برای اضافه کردن این اسکریپت به دیتابیس chkconfig الزامی است . عدد شماره ی 5 مشخه ی runlevel پیش فرضی که قرار است سرویس در آن فعال باشد , می باشد . عدد شماره ی 23 مشخه ی اولیت فعال شدن سرویس ttb پس از تمامی سرویس هایی که با اولویت 23 و کم تر از آن می باشد, است .

یعنی ابتدا سرویس هایی با اولویت 00 و 10 و 15 و … فعال شدن و پس از این که اولویت شماره ی 22 فعال شد , سرویس ما ( که اولیت 23 فعال را به خود می گیرد ) فعال می شود .

توجه داشته باشید که این اولویت اجرا فقط در runlevel هایی هست که قرار است سرویس ما در آن ها فعال باشد . به عنوان مثال ما runlevel فعال بودن سرویس خودمون رو 5 انتخاب کردیم . پس طبیعتا این اولویت فعال شدن فقط برای runlevel شماره ی 5 می باشد . ( اگه به غیر از runlevel شماره ی 5 , شماره ی 4 را هم داشتیم آن وقت این اولویت فعال شدن برای runlevel شماره ی 4 هم اعمال می شد )

عدد شماره ی 55 مشخه ی اولیت غیر فعال شدن سرویس ttb پس از تمامی سرویس هایی که با اولویت 23 و کم تر از آن می باشد, است .

یعنی ابتدا سرویس هایی با اولویت 10 20 40 و … غیر فعال شده و پس از این که اولویت شماره ی 54 غیر فعال شد , سرویس ما ( که اولویت 55 غیر فعال را به خود می گیرد ) غیر فعال می شود .

اجازه بدید همین روند را برای سرویس iptables و ssh بررسی کنیم . برای این منظور :

و هم چنین :

iptables :

همان طور که مشاهده می کنید قسمت ابتدایی اعداد با 2345 پر شده است که این یعنی این سرویس در runlevel های 2345 به صورت پیش فرض فعال باشد .

قسمت دوم اعداد 08 است که به منظور اولویت اجرای این سرویس است که همان طور که می بینید این عدد بسیار کوچیک است پس به این معنی است که این سرویس بسیار مهم بوده و باید زود تر از همه اجرا شود .

قسمت سوم اعداد 92 است که به منظور اولویت غیر فعال شدن این سرویس است که همان طور که می بینید این عدد بسیار کوچیک است پس به این معنی است که این سرویس بسیار مهم بوده و باید آخر از همه غیر فعال شود !

همان طور که می دونید iptables سرویسی مهم است پس زود تر از همه اجرا شده و دیر تر از همه غیر فعال می شود . برای دیدن و اثبات حرف هامون می تونیم به صورت زیر عمل کنیم . یعنی در تمامی دایرکتوری های runlevel ها به دنبال سرویس iptables بگردیم :

001


همان طور که از عکس مشخص است . سرویس iptables در runlevel های 0 و 2 و 6 غیر فعال و اولویت آن 92 می باشد . هم چنین این سرویس در runlevel های 2 تا 5 فعال بوده و اولویت آن 08 می باشد .

یاد آوری : حرف S به منظور فعال و حرف K به منظور غیر فعال بودن سرویس می باشد .

یاد آوری : دو عدد بعد از حرف S و K به منظور اولویت سرویس ها می باشد .

توضیح قسمت start اسکریپت :

در این قسمت 3 دستور به ترتیب اجرا می شود . در ابتدا یک خروجی با مضمون فعال شدن سرویس چاپ می شود سپس اسکریپت پایتون ما در مرحله ی بعدی اجرا می شود . در آخر عبارتی با مضمون “از start استفاده شده است” در فایلی در مسیر tmp/ttb.txt/ نوشته می شود .

توضیح قسمت stop اسکریپت :

همانند قسمت قبل 3 دستور اجرا می شود . در ابتدا یک عبارت با مضمون این که سرویس stop شده است چاپ می شود سپس pid برنامه ای که اجرا کردیم پیدا شده و در نهایت در مقابل دستور زیر قرار می گیرد :

در نهایت عبارتی با مضمون این که از stop استفاده شده داخل فایل ttb.txt ریخته می شود .

توضیح قسمت status اسکریپت :

همانند قسمت بالا 3 دستور در این قسمت به ترتیب اجرا می شود . در ابتدا یک عبارت با مضمون این که از status استفاده شده است در فایل ttb.txt ریخته می شود . در مرحله ی بعد با استفاده از تیکه کد زیر به دنبال pid اسکریپتی که اجرا کردیم می گردیم :

ابتدا PID برنامه ی ما پیدا شده و در فایل ttb.out ریخته می شود . در مرحله ی بعد عبارت disable نیز به این فایل در خطی جدا اضافه می شود .

پس فایل ttb.out دو حالت زیر را می تواند داشته باشد :

الف : در خط اول pid برنامه ی ما و در خط بعدی کلمه ی disable ( که یعنی pid برنامه ما پیدا شده و در فایل ریخته شده است پس برنامه ی ما فعال است )

ب : فقط در خط اول کلمه ی disable ( که یعنی pid برنامه ی ما پیدا نشده یعنی برنامه ی ما فعال نمی باشد و لذا فقط کلمه ی disable در  فایل ریخته می شود )

از همین طریق می توان یک خروجی مناسب با مضمون فعال یا غیر فعال بودن سرویس چاپ کرد !

در مرحله ی بعد خط اول فایل ttb.out خوانده می شود و داخل متغیر status ریخته می شود . در مرحله ی بعد برنامه وارد یک شرط می شود .

اگر عبارت داخل متغییر برابر با disable بود , عبارتی با مضمون ttb is stoped چاپ می شود

و اگر عبارت داخل متغییر status چیزی به غیر از disable بود , عبارتی با مضمون ttb is running… چاپ خواهد شد .

حال جهت اجرا کافیست به اسکریپت خودمون پرمیشن اجرا دهیم . برای این منظور :

حال کافیست اسکریپت خودمون رو به شکل زیر به chkconfig جهت مدیریت سرویس اضافه کنیم :

اگر یک نگاهی به runlevel های فعال سرویس خودمون بندازیم , خواهیم دید که تنها در runlevel شماره ی 5 فعال است چرا که در اسکپریت runlevel پیش فرض را 5 انتخاب کردیم .

002

حال می توان مانند تمامی سرویس های دیگر , این سرویس را نیز مدیریت کرد . هم چنین می توان با استفاده از دستور service سرویس ttbd را مدیریت کنیم . به عنوان مثال :

003


نکته : این آموزش برای توزیعی گفته شد که از systemv به صورت پیش فرض استفاده می شود این در حالی است که centos 7 به صورت پیش فرض از systemd استفاده می کند .

نکته : اسکریپت نویسی این آموزش فقط جهت مثال و آموزش بود و نمی توان آن را با سرویس های بزرگی همچون ssh و http و … مقایسه کرد .

 

نویسنده : E2MA3N

منبع : او اس لرن |http://OSLearn.ir

 

از این مطلب راضی هستید ؟ می خواهید به سایت کمک کنید ؟ رضایت خودتون رو با دونیت به ما اعلام کنید . برای دونیت روی خرید کلیک کنید . با تشکر

[parspalpaiddownloads id=”8″]

درباره نویسنده :

ایمان همایونی هستم، از سال 2009 با گنو لینوکس فعالیت خودم رو در زمینه ی کامپیوتر و IT شروع کردم و تا الان موفق به گذروندن دوره هایLPIC 1 / LPIC 2 / VCP5-DCV / MCITP / CCNA / MTCNA شدم . مدتی در زمینه امنیت فعالیت هایی داشتم اما در حال حاضر تمرکز خودم رو بر روی مجازی سازی و لینوکس گذاشته ام .

تمام پست های من - وب سایت من