چه سرویس هایی در چه سطوح اجرایی د حال اجرا شدن هستند

با استفاده از دستور chkconfig می توان فهمید که چه سرویس هایی در کدام Run Level ها فعال یا غیر فعا هستند. برای هر سطح اجرایی دایرکتوری در زیر دایرکتوری etc/rc.d/ شامل اسکریپت هایی برای هر سرویس که با Sxx یا Kxx شروع می شوند. اسکریپت هایی که با S شروع می شوند با ورود به سطح اجرایی مربوطه اجرا می شوند و آنهایی که با K شروع می شوند با ورود از سطح اجرایی غیر فعال می شوند. xx نشان دهنده عددی است که از 01 شروع و تا عدد دیگری ادامه دارد و اسکریپت ها به ترتیب این اعداد اجرا می شوند.

دستور زیر فهرست اسکریپت های سطح اجرایی 3 را نشان می دهد.

ls  -l  /etc/rc.d/rc2.d

خروجی :

lrwxrwxrwx. 1 root root 15 Dec 28 19:52 K89rdisc -> ../init.d/rdisc
lrwxrwxrwx. 1 root root 19 Dec 28 19:55 K95firstboot -> ../init.d/firstboot
lrwxrwxrwx. 1 root root 17 Dec 28 19:59 S01sysstat -> ../init.d/sysstat
lrwxrwxrwx. 1 root root 22 Dec 28 19:59 S02lvm2-monitor -> ../init.d/lvm2-monito

تمامی فایل های درون این دایرکتوری ها لینک هایی به فایل های درون دایرکتوری etc/init.d/ هستند. بطور مثال در خروجی بالا سرویس rdisc در سطح اجرایی 2 غیر فعال و اسکریپت sysstat در این سطح فعال است. با استفاده از دستور chkconfig می توان وضعیت فعال (Start) یا غیر فعال (Kill) بودن یک سرویس را تشخیص داد. در دستور chkconfig وضعیت on یعنی start بودن یک اسکریپت (یعنی اول نام فایل اسکریپت S بیاید) و وضعیت off یعنی غیر فعال kill بودن یک اسکریپت (یعنی اول نام فایل K بیاید). با استفاده از سوئیچ list– می توان فهرست کاملی از سرویس ها در سطوح اجرایی متفاوت را مشاهده کرد. جلوی هر عدد 0 تا 6 که نشان دهنده سطح اجرایی 0 نا 6 است یکی از وضعیت های on یا off می آید.

chkconfig  -list  |  less

خروجی :

NetworkManager  0:off   1:off   2:on    3:on    4:on    5:on    6:off
abrtd           0:off   1:off   2:off   3:on    4:off   5:on    6:off
acpid           0:off   1:off   2:on    3:on    4:on    5:on    6:off
anamon          0:off   1:off   2:off   3:off   4:off   5:off   6:off

برای تعیین وضعیت یک سرویس خاص از دستور زیر استفاده کنید. فرمت زیر تمامی سرویس چه آنهایی که بصورت Standalone و توسط init کنترل می شوند و چه آنهایی که توسط xinetd کنترل می شوند را نشان می دهد.

chkconfig –list service_name

بطور مثال دستور زیر و خروجی آن که نشان می دهد sshd در سطوح اجرایی 4,3,2 و 5 فعال است. حتمن اسیکریپت های sshd در سطوح 2 تا 5 ابتدایشان S دارند.

chkconfig –list sshd

sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

برای فعال کردن (on) یک سرویس از شکل زیر استفاده کنید. با اجرای فرمت زیر سرویس بصورت خودکار در سطوح اجرایی 4,3,2 و 5 فعال خواهد شد. اگر قبلن سرویس در یکی از سطوح غیر فعال بود (K) پس از اجرای دستور بالا اول نام فایلش در دایرکتوری های مربوطه به S تبدیل می شود. بازهم دستور زیر برای سرویس های تحت کنترل xinetd نیز استفاده می شود.

chkconfig service_name on

chkconfig httpd on

برای فعال کردن در یک سطح اجرایی خاص از فرمت زیر استفاده کنید.

chkconfig service_name on –level runlevels

chkconfig httpd on –level 3

chkconfig httpd on –level 35

در دومین خط بالا سرویس httpd در سطح اجرایی 3 و در سومین خط بالا در سطح اجرایی 3 و 5 فعال خواهد شد.

برای غیر فعال کردن (off) یک سرویس از شکل زیر استفاده کنید. با اجرای فرمت زیر سرویس بصورت خودکار در سطوح اجرایی 4,3,2 و  5  غیر فعال خواهد شد. اگر قبلن سرویس در یکی از سطوح فعال بود (S) پس از اجرای دستور بالا اول نام فایلش در دایرکتوری های مربوطه به K تبدیل می شود. بازهم دستور زیر برای سرویس های تحت کنترل xinetd نیز استفاده می شود.

chkconfig service_name off

chkconfig httpd off

برای غیر فعال کردن در یک سطح اجرایی خاص از فرمت زیر استفاده کنید.

chkconfig service_name off –level runlevels

chkconfig httpd off –level 3

chkconfig httpd off –level 35

در دومین خط بالا سرویس httpd در سطح اجرایی 3 و در سومین خط بالا در سطح اجرایی 3 و 5  غیر فعال خواهد شد.

اما وضعیت سرویس ها در سطوح اجرایی 0 و 6 چطور هست؟ سطوح اجرایی 1 تا 5 قاعدتن سطوحی هستند که باید سرویس ها در آنها فعال یا Start باشند و در سطوح اجرایی 0 برای halt شدن و سطح اجرایی 6 برای reboot شدن قاعدتن همه سرویس ها باید غیر فعال یا Kill باشند . اما نکته جالب اینکه در ورود به سطوح اجرایی 0 و 6 دو سرویس زیر فعال یا Start خواهند شد.

*ls  -l  /etc/rc.d/rc0.d/S

خروجی دو سرویسkillall و halt هستند که در هردو سطح اجرایی 0 و 6 وجود دارند.

lrwxrwxrwx. 1 root root 17 Dec 28 19:52 /etc/rc.d/rc0.d/S00killall -> ../init.d/killall
lrwxrwxrwx. 1 root root 14 Dec 28 19:52 /etc/rc.d/rc0.d/S01halt -> ../init.d/halt

از عدد مربوط به هر کدام از اسکریپت ها معلوم می شود که اول اسکریپت killall اجرا می شود و سپس اسکریپت halt اجرا خواهد شد. پیش از همه اینها نیز تمامی اسکریپت هایی که با K شروع می شوند اجرا شده اند. اسکریپت killall تمامی سرویس های غیر لازم که هنوز ( پس از اجرای اسکریپت های K که خودشان سرویس هایی را Kill می کنند) فعال هستند را Kill یا غیر فعال می کند. اسکریپت halt نیز تمامی فرایند های تحت کنترل init را از بین برده و تمامی سیستم فایل ها را Unmount می کند و در نهایت سیستم halt یا reboot می شود.