مدیریت سرویس ها در زمان start-up در دبین و آبانتو بهمراه آموزش تصویری

0
سرویس های لینوکس را میتوان به وسیله اسکریپتهایی که در etc/init.d/ قرار دارند start , stop و reload کرد.
با این وجود , در مدت بالا آمدن سیستم یا وقتی که سطح اجرایی (runlevel) را تغییر می دهیم , سیستم اسکریپت ها را در /etc/rcX.d/ جستجو می کند که X شماره سطح اجرایی می باشد.
فایل های درون etc/rcX.d در واقع لینک هایی به اسکریپتهای درون دایرکتوری etc/init.d/ می با شند.
این آموزش شرح خواهد داد که چطور شخصی میتواند سرویسی را در زمان بالا آمدن سیستم یا اصطلاحا start-up فعال , غیرفعال و کلا مدیریت کند.
وقتی که یک سرویس را در دبین و خانواده آن نصب می کنید , بطور پیش فرض در start-up فعال می شود.
بطور مثال اگر شما apache2 را نصب کنید , سرویس apache همان زمان شروع به کار میکند و برای فعال شدن در شروع مجدد سیستم هم تنظیم می شود.
اگر شما از apache در همه زمان ها استفاده نمی کنید , ممکن است بخواهید این سرویس در زمان start-up غیرفعال باشد و براحتی فقط زمانی که به آن نیاز دارید با دستور زیر سرویس را فعال کنید :
PersianAdmins:#/etc/init.d/apache2   start
شما می توانید این سرویس را درزمان بوت غیر فعال کنید به وسیله حذف تمامی لینک های سمبلیک در etc/rcX.d/SYYapache2/ یا با استفاده از sysv-rc-conf , update-rc.d و ….
مزیت استفاده از sysv-rc-conf , update-rc.d و ابزارهای مشابه در اینست که وظیفه حذف یا اضافه کردن تمام لینک های مورد نیاز به etc/init.d/ را بصورت خودکار انجام می دهد.
apache2 را بعنوان مثال در نظر می گیریم , وضعیت apache در etc/rcX.d/ را مورد بررسی قرار می دهیم :
PersianAdmins:#ls   -l   /etc/rc?.d/*apache2
lrwxrwxrwx 1 root root 17 2007-07-05 22:51 /etc/rc0.d/K91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root 17 2007-07-05 22:51 /etc/rc1.d/K91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root 17 2007-07-05 22:51 /etc/rc2.d/S91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root 17 2007-07-05 22:51 /etc/rc3.d/S91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root 17 2007-07-05 22:51 /etc/rc4.d/S91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root 17 2007-07-05 22:51 /etc/rc5.d/S91apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root 17 2007-07-05 22:51 /etc/rc6.d/K91apache2 -> ../init.d/apache2
چنانکه قابل مشاهده میباشد , برای سطوح اجرایی 0 , 1 و 6 لینک ها با حرف K شروع می شوند و سطوح اجرایی 2 , 3 , 4 و 5 با S آغاز میشوند.این دو حرف از Kill و Start گرفته شده است.
در دبین و آبانتو سطوح اجرایی 2 , 3 , 4 و 5 از نوع چند کاربره می باشد و سطح اجرایی 2 بصورت پیش فرض تعیین شده است.
سطح اجرایی 0 برای خاموش کردن سیستم می باشد.
سطح اجرایی 1 مد تک کاربر میباشد.
سطح اجرایی 6 برای شروع مجدد سیستم می باشد.
با استفاده از دستور runlevel می توان سطح اجرایی فعلی را مشخص کرد.خروجی این دستور همانند زیر است :
PersianAdmins:~# runlevel
 N 2
N نشان دهنده حالت عادی یا normal و S نشان دهنده حالت تک کاربره یا single می باشد.عدد بعد از این حروف نشان دهنده سطح اجرایی در حال حاظر می باشد.
همچنین با استفاده از فایل etc/inittab/ سطح اجرایی پیش فرض قابل مشاهده و تغییر است.
وقتی سیستم در حال بوت شدن می باشد به فایل etc/inittab/ رجوع می کند و سطح اجرایی پیش فرض را می خواند که در اینجا سطح اجرایی 2 می باشد , سپس به دایرکتوری etc/rc2.d/ می رود و تمامی اسکرپیت ها را به ترتیب اولویت اجرا می کند.اولویت بر اساس شماره بعد از S می باشد که هر چه عدد کوچکتر باشد زودتر اجرا می شود و اگر دو لینک هم عدد باشند بر اساس حروف الفبا اولویت بندی می شوند.
ارزش این اولویت بندی در سرویس هایی که وابسته به دیگر سرویس ها می باشند مشخص می شود تا سرویس مادر زودتر اجرا شود.
در هنگام خاموش شدن سیستم این اولویت بندی برعکس می باشد بطوریکه لینک با عدد بزرگتر زودتر غیر فعال می شود.

 مدیریت سرویس ها در زمان start-up با update-rc.d

1-حذف کردن سرویس از start-up
اگر شما می خواهید سرویس apache2 را بصورت کامل و دستی غیر فعال کنید , می بایست هر لینک در etc/rcX.d/ را حذف کنید.با استفاده از update-rc.d این کار بدین آسانی می باشد :
PersianAdmins:#update-rc.d  -f  apache2  remove
از f- برای مجبور کردن سیستم در حذف لینک ها حتی در صورت وجود etc/init.d/apache2/ استفاده می کنیم.
2-اضافه کردن سرویس به start-up
برای اضافه کردن سرویس به start-up میتوان از اولویت پیش فرض استفاده کرد یا اولویت مورد نظر خودمان را بکار برد.
2.1با اولویت پیش فرض (Default priorities)
حال اگر بخواهیم سرویس را دوباره تنظیم کنیم تا زمان بوت فعال شود , به آسانی قابل انجام است :
PersianAdmins:#update-rc.d   apache2   defaults
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K20apache2 -> ../init.d/apache2
/etc/rc1.d/K20apache2 -> ../init.d/apache2
/etc/rc6.d/K20apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S20apache2 -> ../init.d/apache2
2.2-با اولویت دلخواه (Custom priorities)
اما چنانکه میتوانید مشاهده کنید , مقدار پیش فرض 20 میباشد که در مقایسه با 91 نسبتا متفاوت است.
یک لینک S20 قبل از S91 فعال می شود و یک K91 قبل از k20 غیر فعال می شود.
برای اینکه apache2 را مجبور کنیم برای فعال و غیر فعال شدن با اولویت 91 عمل کند , همانند زیر عمل میکنیم :
PersianAdmins:#update-rc.d   apache2   defaults 91
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K91apache2 -> ../init.d/apache2
/etc/rc1.d/K91apache2 -> ../init.d/apache2
/etc/rc6.d/K91apache2 -> ../init.d/apache2
/etc/rc2.d/S91apache2 -> ../init.d/apache2
/etc/rc3.d/S91apache2 -> ../init.d/apache2
/etc/rc4.d/S91apache2 -> ../init.d/apache2
/etc/rc5.d/S91apache2 -> ../init.d/apache2
2.3-اولویت های متفاوت برای فعال کردن و غیر فعال کردن (Different priorities for Start and Kill)
متعاقبا , اگر بخواهید اولویت فعال شدن متفاوت از غیر فعال شدن باشد , می بایست بدین ترتیب عمل کنید :
(در اینجا اولویت 20 را برای start و 80 را برای kill در نظر می گیریم )
PersianAdmins:#update-rc.d   apache2   defaults   20   80
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K80apache2 -> ../init.d/apache2
/etc/rc1.d/K80apache2 -> ../init.d/apache2
/etc/rc6.d/K80apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S20apache2 -> ../init.d/apache
3.Specifying custom runlevels
در پایان اگر شما تمایل دارید سرویس ها فقط در سطوح اجرایی خاصی فعال و غیرفعال شوند , مثلا apache با اولویت 20 را در سطوح اجرایی 2 , 3 , 4 و 5 فعال و در سطوح اجرایی 0 , 1 و 6 غیر فعال کنیم:
PersianAdmins:#update-rc.d   apache2   start   20   2   3   4   5   .   stop   80   0   1   6   .
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K80apache2 -> ../init.d/apache2
/etc/rc1.d/K80apache2 -> ../init.d/apache2
/etc/rc6.d/K80apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S20apache2 -> ../init.d/apache2
یا فقط در سطح اجرایی 2 اجرا شود :
PersianAdmins:#update-rc.d   apache2   start   20   2 . 
Adding system startup for /etc/init.d/apache2 ...
/etc/rc2.d/S20apache2 -> ../init.d/apache2
یا برای فعال شدن در سطوح اجرایی 2 , 3 و 4 با اولویت 20 و فعال شدن در سطح اجرایی 5 با اولویت 30 و غیرفعال شدن در سطوح اجرایی 0 , 1 و 6 با اولویت 80 :
PersianAdmins:#update-rc.d   apache2   start   20   2   3   4   .   start   30   5   .   stop   80   0   1   6   .
Adding system startup for /etc/init.d/apache2 ...
/etc/rc0.d/K80apache2 -> ../init.d/apache2
/etc/rc1.d/K80apache2 -> ../init.d/apache2
/etc/rc6.d/K80apache2 -> ../init.d/apache2
/etc/rc2.d/S20apache2 -> ../init.d/apache2
/etc/rc3.d/S20apache2 -> ../init.d/apache2
/etc/rc4.d/S20apache2 -> ../init.d/apache2
/etc/rc5.d/S30apache2 -> ../init.d/apache2

مدیریت سرویس ها در زمان start-up با sysv-rc-conf

ابزار sysc-rc-conf که برای مدیریت سرویس ها در زمان start-up استفاده می شود , کارکردی شبیه chkconfig در لینوکس های بر پایه ردهت دارد به علاوه دارا بودن ابزار گرافیکی تحت شل که مدیریت سرویس ها را آسانتر می کند و اگر دستور sysv-rc-conf را بدون هیچ گزینه ای استفاده کنیم این محیط گرافیکی همانند شکل زیر ظاهر می شود.
همانطور که مشاهده می کنید , مدیریت سرویس ها توسط این محیط گرافیکی در همه سطوح اجرایی ممکن و به آسانی قابل انجام است و نقطه قوت این ابزار اجرا شدن آن در محیط متنی که هیچ گونه محیط گرافیکی بر روی سیستم نصب نیست ,می باشد.
از Sysc-rc-conf بدون استفاده از این محیط هم میتوان برای مدیریت سرویس ها استفاده کرد که در ادامه به آن می پردازیم.
نصب این ابزار بدین گونه میباشد :
PersianAdmins:#apt-get   install   sysv-rc-conf
لازم به تذکر است که اگر با کاربر root به سیستم وارد نشده اید ابتدای هر دستور از sudo استفاده می کنیم.
برای مشاهده لیست سرویس ها و وضعیت آنها :
 PersianAdmins:~# sysv-rc-conf   --list
 acpid            0:off      1:off   2:on    3:on    4:on    5:on    6:off
 apache2       0:off      1:off   2:on    3:on    4:on    5:on    6:off
 atd               0:off      1:off   2:on    3:on    4:on    5:on    6:off
 ....
 ....
 umountroot   0:on       6:on
 urandom        0:on       6:on    S:on
 winbind          0:off      1:off   2:on    3:on    4:on    5:on    6:off
یا مثلا مشاهده وضعیت یه سرویس خاص مثل mysql :
PersianAdmins:~# sysv-rc-conf   --list   mysql
 mysql        0:off      1:off   2:on    3:on    4:on    5:on    6:off
برای فعال کردن یک سرویس مثلا apache2 در سطوح اجرایی 2 و 5 بدین نحو عمل می کنیم :
PersianAdmins:#sysv-rc-conf    apache2  on
یا برای غیر فعال کردن در سطوح اجرایی 2 و 5 :
PersianAdmins:#sysv-rc-conf   apache2   off
همچنین شما می توانید در هر سطح اجرایی که دوست دارید سرویس را فعال یا غیرفعال کنید.در اینجا سرویس apache2 را سطوح اجرایی 3 و 5 فعال می کنیم :
PersianAdmins:#sysv-rc-conf   --level   35   apache2   on

مدیریت سرویس ها در زمان start-up با rcconf

گزینه دیگر برای مدیریت سرویس ها rcconf میباشد که بر خلاف update-rc.d بصورت ساده تر و ویژوال قابل انجام است ولی نسبت به sysv-rc-conf دارای گزینه ها و امکانات کمتری است.
برای نصب rcconf بدین صورت عمل می کنیم :
PersianAdmins:#apt-get   install   rcconf
برای اجرا شدن در شل rcconf را تایپ میکنیم و بعد از آن پنجره ای همانند شکل زیر ظاهر میشود و از طریق آن براحتی میتوانیم به مدیریت سرویس ها بپردازیم .

مدیریت سرویس ها در زمان start-up با file-rc

ابزار دیگر مدیریت سطوح اجرایی file-rc می باشد که برخلاف ابزارهای قبلی نه دستوری است و نه گرافیکی , بلکه تنظیمات توسط فایل etc/runlevel.conf/ صورت می پذیرد.
نمونه این فایل در اینجا قابل مشاهده می باشد.
نصب این ابزار مدیریتی :
PersianAdmins:#apt-get   install   file-rc
نحوه نوشتن تنظیمات در فایل etc/runlevel.conf/ بدین صورت می باشد :
<sort>   <off-levels>   <on-levels>   <command>
 20    0,1,6   2,3,4,5   /etc/init.d/apache2

مدیریت سرویس ها در زمان start-up با Sysvconfig

کسانیکه با توزیع های بر پایه ردهت مانند RHEL , Fedora , CentOS کار کرده اند برای راه اندازی ، توقف ، شروع مجدد و بارگزاری مجدد از دستور Service استفاده می کنند و وقتی وارد توزیع های بر پایه دبین مثل اوبونتو و دبین می شوند با این مشکل مواجه می شوند که مثلا برای شروع مجدد سرویس آپاچی باید این دستور را اجرا کنند

/etc/init.d/apache2 restart
* برای اضافه کردن دستور سرویس باید بسته Sysvconfig را نصب کنیم .برای این منظور بدین ترتیب عمل کنید :
PersianAdmins:#apt-get   install   sysvconfig
شکل استفاده از دستور همانند ردهت می باشد :
service    [service-name]    restart
service    [service-name]    stop
service    [service-name]    start
بطور مثال برای شروع سرویس آپاچی بدین صورت عمل می کنیم :
service apache2 strat
البته مزیت استفاده از شیوه ابتدایی که در ابتدای آموزش بیان شد در اینست که نیازی نیست تا اسم سرویس را بطور کامل بیاد داشته باشیم بدلیل انکه وقتی در دایرکتوری مورد نظر قرار گرفتیم با زدن کلید Tab اسم سرویس کامل می شود.
ممکن است بگویید که در ردهت هم اینچنین مشکلاتی ممکن است رخ دهد ، ولی مشکل دبین در اینست که ورژن بسته هایی که نصب می کنید را در انتهای نام سرویس ذکر می کند که این مورد در ردهت وجود ندارد.
از دستور Sysvconfig بصورت گرافیکی هم می توان بهره گرفت.با اجرای دستور sysvconfig بدون اضافه کردن پارامتر محیط گرافیکی مانند شکل زیر ظاهر می گردد.
مشاهده می کنید که امکان فعال یا غیرفعال کردن سرویس ها در زمان Start up را خواهید داشت بهمراه تنظیمات مورد نیاز برای سطح های اجرایی

طریقه تنظیم start-up برای یک اسکریپت خاص

گاهی اوقات پیش میآید که میخواهیم یک اسکریپت مورد نظرمون را طوری تنظیم کنیم که در زمان srart-up اجرا و فعال شود , برای رسیدن به این هدف بدین گونه عمل میکنیم :
ابتدا اسکریپت مورد نظر را در etc/init.d/ میسازیم :
PersianAdmins:#touch /etc/init.d/behroozi 
سپس محتویات اسکریپت مورد نظر را می نویسیم (محتویات زیر برای تست میباشد) :
#!/usr/bash
echo "this is a sample service"
echo reza > /reza/behroozi
حال مجوز لازم برای اجرای اسکریپت را به آن می دهیم :
PersianAdmins:#chmod +x /etc/init.d/behroozi
حال برای اینکه در زمان start-up اجرا شود دستور زیر را بکار ببرید :
PersianAdmins:#update-rc.d behroozi defaults
و برای اینکه بطور دستی این اسکریپت را مثلا در سطح اجرایی 2 تنظیم کنید تا فعال شود بدین ترتیب عمل می کنیم :
PersianAdmins:#ln -s /etc/init.d/behroozi /etc/rc2.d/S91behroozi

حال اگر با دستور init 6 سیستم را دوباره راه اندازی کنید در فایل reza/behroozi/ کلمه reza نوشته شده است.

نگارنده : رضا بهروزی

نظرات مسدود است.