اطلاعیه

بستن
No announcement yet.

مدیریت runlevel ها و آشنایی با روند boot در linux

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    مدیریت runlevel ها و آشنایی با روند boot در linux

    دانستن نحوه عملکرد سیستم عامل به کاربران در حل مشکلات سیستم خیلی کمک میکند که روند بوت در لینوکس چطور هست و اینکه منظور از اینکه لینوکس در چندین سطح اجرا میشه چیه ؟ که در ادامه با runlevel ها در لینوکس و سطوح اجرایی و مفاهیم و ابزارها و همچنین روند بوت در لینوکس میپردازیم. آموزش روند بوت لینوکس و RunLevel ها برای تمامی کسانی که به تازگی با سیستم عامل لینوکس شروع به کار نموده اند مفید بوده و آنها را در فهم بهتر معماری این سیستم عامل یاری می نماید.

    توصیه میشود مقاله کوتاه ولی مهم فرایند 6 مرحله ای بوت در لینوکس را مطالعه کنید :
    http://linux-zone.org/forums/thread3297.html

    مقاله آموزش کامل دستورات ترمینال لینوکس هم میتوانید از طریق لینک زیر مطالعه کنید :
    http://linux-zone.org/forums/thread301.html


    آشنایی با روند بوت در لینوکس :
    در ابتدا وقتی لینوکس بارگذاری میشه در مرحله اول چک آپ اولیه ای از سیستم مثل برسی رم و سی پی یو و قطعات کامپیوتر مثل کیبرد و موس و غیره انجام میشه که این کارها در ابتدای قبل از تحویل دادن به Baios و پس گرفتن از بایوس انجام میشه بعد از اینکه دیوایس ها شناخته شد بایوس آماده میشه تا سیستم رو تحویل به هارد دیسک شما بده که سیستم عامل تون لود بشه بعد میره سراغ هاردیسک جایی که MBR یا Master Boot Rercord (اولین سکتور هارد تون) هست که اطلاعات بوت دیسک در اون وجود دارد که سیستم عامل رو از اونجا boot میکنه.

    در مواردی که شما دو یا بیشتر از یک سیستم عامل دارین این اتفاق به صورت دیگه ای رخ میده که یا شما باید از نرم افزاری برای انتخاب دو سیستم عامل در Master Boot Rercord استفاده کنید که در فضای کوچک مستر بوت ریکورد قرار بگیره یا اگر نرم افزار بزرگ هست چاره ای دیگه اندیشه بشه. دو نرم افزار مدیریت بوت برای سیستم عامل لینوکس که از بقیه معروف تر هستند lilo یا grub هستند گراب داری دو ورژن هست یک و دو هست که ورژن دو خیلی قدرتمند تر و حرفه ای تر میباشد و همچنین به دلیل زیادی حجم اون در مستر بوت ریکورد جا نمیشد و برعکس Lilo که جا میشد این مشکل رو نداشت ولی قابلیت هاش کمتر از گراب بود. برای حل این مشکل اول آدرس grub رو در Master Boot Rercord مینویسیم و وقتی که سیستم تحویل داده شد به Master Boot Rercord بعد آدرس گراب پیدا بشه و سیستم برای بوت به اون قسمت مراجعه کنه.

    همونطور که میدونید موقع نصب لینوکس پارتیشنی ساخته میشود به نام boot که معمولا توی یک پارتیشن جداگانه نصب میشه ولی داخل پارتیشن root هم میتونید اونو هم نصب کنید . داخل اسلاش بوت (boot/) اطلاعات مربوط به grub یا خود گراب - kernel شما و یکسری از ماژول ها قرار داره که کرنل برای بوت شدن به اونها نیاز خواهد داشت بعد از اینکه گراب انتخاب شد مرحله یک به اتمام رسیده و وارد مرحله دوم میشیم وقتی که سیستم عامل رو انتخاب کردین تحویل میده به کرنل . برای دیدن اطلاعات گراب میتوانید به فولدر boot/grub/ مراجعه کنید و فایل grub.cfg را باز کنید.

    نکته : برای تغیرات در فایل گراب ابتدا فایل گراب را از این مسیر باز کنید etc/defualt/grub/ و تغییرات خود را در این فایل انجام بدین بعد تغییرات انجام شده خودش در فایل grub.cfg اعمال میشه. و سعی کنید اگر به لینوکس تسلط ندارین این دو فایل بالا رو دستکاری نکنید.
    خوب بریم سراغ مرحله بعد که لود کرنل به چه صورت انجام میشه ما در ابتدای به امر - که بوت مون مشخص شد داخل فولدر بوت فایل های kernel مون وجود داره به نام vmlinuze که ورژنش هم به همراهش هست که این فایل ها باید بارگذاری بشن :

    کد PHP:
    root@localhost:~# ls -l /boot/
    total 15224
    -rw-r--r-- 1 root root   129281 Dec  8 11:48 config-3.2.0-4-amd64
    drwxr
    -xr-x 3 root root    12288 Dec 13 21:03 grub
    -rw-r--r-- 1 root root 10482978 Dec 13 21:03 initrd.img-3.2.0-4-amd64
    -rw-r--r-- 1 root root  2113842 Dec  8 11:48 System.map-3.2.0-4-amd64
    -rw-r--r-- 1 root root  2842528 Dec  8 11:37 vmlinuz-3.2.0-4-amd64 
    قبل از این عمل دیگه ای انجام میشه که فایل init.rd.img یا initial ram disk اجرا میشه که به صورت موقت در مموری بارگذاری میشه تا با استفاده از کرنلی که وجود داره و ماژول های اولیه که هست پارتیشن اسلاش شما یا همون روت شما بارگذاری بشه ابتدا این فایل لود میشه که یه فایل اسکریپت داخلش داره به نام init که مادر همه اسکریپ ها میباشد. شما اگر این دستور رو در ترمینال لینوکس خود وارد کنید :

    کد PHP:
    root@localhost:~# ps ax | grep init
        
    ?        Ss     0:01 init [2]  
    14706 pts/0    S+     0:00 grep init 
    متوجه خواهید شد که با PID شماره 1 میباشد. یعنی اولین برنامه ای که روی سیستم تون اجرا میشه این فایل init هست که مسولیت بالا اوردن تمامی سرویس هایی که روی سیستم عامل تون هست این برعهده داره اما در ابتدا این sbin/init/ داخل پارتیشن روت قرار داره این پوشه اول باید چک بشه شاید در فایل initتعریف شده وقتی سیستم داره بالا میاد چک بشه یا برای mount کردن ها در کانفیگ اون پارتیشن تعریف شده که هر دفعه سیستم بالا اومد اون چک بشه - پس قبل از اینکه بخواد اون رو شروع کنه یک پروسه دیگه ای اتفاق بیوفته تا خود اون رو چک کنه و بعد بیاد init که داخل اینی که هست رو استارت کنه این عملیات وردوش initrd هست که کرنل رو به همراه یک فای init که داخل دایرکتوری روت همین فایل زیپ شده هست قرار داره و بعد از باز شدنش در مموری میاد و اون فایل رو فراخوانی میکنه و بعدش init رو فراخوانی کنه و بعدش مراحل بعدی بوت رو انجام بده.

    runlevel یا سطوح اجرایی در لینوکس چیست ؟
    سطوح اجرا (runlevels) به مدهای عملیاتی سیستم عامل گفته می شود که وضعیت دستگاه بعد از بوت شدن را تعریف می کند. اکثر مشاهده کردین موقع بوت شدن ویندوز اگر کلید F8 روبزنید ویندوز رو با حالت safe mode میاره بالا که در اونجا میتونید سطوح مختلف ویندوز رو مشاهده کنید که میتونید بگید که بدون شبکه بیاد بالا یا با اخرین تغییراتی که انجام شده و غیره بیاد بالا :

    برای بزرگتر شدن عکس روی آن کلیک کنید

نام:	safemode.jpg
نمایش ها:	1
اندازه:	35.0 KB
شناسه:	18788

    توی سیستم عامل لینوکس به این حالت های مختلف بالا امدن میگیم runlevel

    برای اجرای لینوکس چندین سطح تعریف شده که هر یک از این سطوح یکسری امکانات وجود دارند که موقع بوت شدن به هر سطحی که میرسه پروسه های مورد نیاز اون سطح استفاده میشه که در جدول شماره 2 به طور کامل روند بوت در لینوکس رو که در 6 سطح انجام میشه رو توضیح دادیم.
    اگر لینوکس را در سطح 2 اجرا کنیم به شبکه دسترسی نخواهیم داشت. پروسه init در دایرکتوری sbin مسولیت انتخاب یک سطح و اجرای لینوکس را بر عهده دارد. برای تغییر سطح اجرایی در لینوکس باید فایل etc/inittab/ را ویرایش کنید.
    به طور قراردادی ۷ سطح اجرا وجود دارد که از ٠ تا ٦ شماره گذاری شده اند؛ البته تا ده مد اجرا یعنی از 0 تا 9 می تواند تعریف و استفاده شود. یکی از این مدهای عملیاتی، مد تک کاربره است که می توان بجای عدد از نماد S استفاده کرد.
    نکته : هنگام بوت تنها یکی از سطوح اجرای ٢ یا ٣ یا ٤ اجرا میشود و اینطور نیست که به ترتیب سطوح 1,2,3,4,5 اجرا شود .

    سطوح اجرا معمولاً به وضعیت های زیر تخصیص یافته اند :
    مد تک کاربره
    مد چندکاربره بدون شروع سرویس های شبکه
    مد چندکاربره با سرویس های شبکه
    خاموش کردن سیستم
    راه اندازی مجدد (ریبوت) سیستم

    تنظیمات دقیق پیکربندی های فوق از سیستم عامل به سیستم عامل و از یک توزیع لینوکس به توزیع دیگر فرق می کند. مثلاً سطح اجرای 4 ممکن است در یک توزیع مد چندکاربره، محیط کاربری گرافیکی یا بدون هیچ سروری باشد و در توزیع دیگری سطح 4 ممکن است هیچ چیز نباشد که در جداول زیر به صورت کامل به تفاوت سطوح اجرا در لینوکس ها و یونیکس ها متفاوت پرداخته ایم.

    در عمل و به طور استاندارد وقتی کامپیوتری به سطح اجرای 0 وارد می شود، متوقف و خاموش می شود و وقتی وارد سطح 6 می شود راه اندازی مجدد می شود. سطوح اجرای بین این دو سطح (‎1-5) در دیسک گردان هایی که سوار می شوند و سرویس های شبکه ای که شروع می شوند با هم فرق می کنند. سطوح اجرای پیش فرض معمولاً 3، 4 یا 5 است. سطوح اجرای پایین تر چون معمولاً هیچ سرویس شبکه ای ارائه نمی کنند، برای نگه داری و تعمیرات اضطراری بکار می روند. جزییات مختص هر سطح اجرا به طور گسترده ای از سیستم عامل به سیستم عامل و همینطور بین پیکربندی های مدیران سیستم فرق می کند.

    ران لول شماره 1 ران لول single user mode هست همون safe mode خودمون در سیستم عامل ویندوز که توی این حالت تمام سرویس ها off هستند و gui ندارین وفقط کنسول روت دارین مثلا اگر شما خواستید کرنل رو پچ کنید و یا کرنل جدید بارگذاری کنید و سرویسی رو بارگذاری یا دستکاری کنید نیازمند پایین ترین سطح دسترسی سیستم میباشید و نیاز دارید که همه سرویس ها off باشند که مشکلی برای سسیستم به وجود نیاد توی این حالت میریم. البته برای تغییر رمز کاربر روت هم میتونید از این سطح استفاده کنید.

    از لول 2 تا 5 توی سیستم عامل های دبیان و ردهت متفاوت هست سیستم عامل های دبیان توی سطح اجرایی 2 به حالت multi user with graficall user interface میرن و تمام سرویس ها اجرا هستند و همه چی تحت کنترل کاربر هست .
    توی دبیان از ران لول 3 تا 5 حالت user difinde هست و شما میتونید تعریف کنید که چی در اون ران لول اجرا بشه یا نشه ولی در سیستم عامل ردهت ران لول 2 حالت user defind هست توی ران لول 3 تمامی سرویس ها رو داریم و مولتی یوزر هستیم ولی gui نداریم و فقط از کنسول میتونیم استفاده کنیم. ران لول 4 در سیستم های ردهت user difind هست و خودش میتونه تعریف کنه توی ران لول 5 در خانواده های ردهت مثل centos شما multi user با تمام سرویس ها با دیسپلی و کنسول و gui هم دارین.
    داخل اون پوشه ها که میرید یکسری اسکریپت ها رو دارند که یکسری سرویس ها رو اجرا میکنند همانطور که میدونید که وقتی ما سرویسی رو میخوایم داخل لینوکس ران بکنیم اون فایل اجراییش رو مستقیما فراخونی نمیکنه و اسکریپت سرویسش رو فراخوانی میکنه.
    اسکریپت سرویس ها در پوشه ای قرار داره به نام init.d در مسیر زیر قرار دارد :
    کد PHP:
    cd /etc/init.d
    که این اسکریپت ها میان اون فایل های اجرایی binary یا apachi یا DNS یا هر چیز دیگه ای اول چک میکنن که این سرویس پیش نیاز هایی داره یا نداره یا تغییراتی میخواد یا نه و یه سری چک های اولیه انجام میده و بعد میاد اون فایل رو فراخوانی میکنه که به صورت سرویس اجرا بشه.

    برای همه اینها در پوشه etc/ یکسری فولدر هست با نام های rc0.d , rc1.d , rc2.d , rc3.d , rc4.d , rc5.d , rc6.d :
    کد PHP:
    root@localhost:~# cd /etc/rc
    rc0.drc1.drc2.drc3.drc4.drc5.drc6.drcS.d
    اگر از یکی از محتویات داخل فولدرها لیست بگیرید متوجه خواهید شد همه این اسکریپت ها لینک شدن به init.d :
    کد PHP:
    lrwxrwxrwx   1 root root    20 Dec  5 22:07 K01virtualbox -> ../init.d/virtualbox
    lrwxrwxrwx   1 root root    22 Dec 19 18
    :51 K01zabbix-agent -> ../init.d/zabbix-agent
    lrwxrwxrwx   1 root root    22 Dec  5 20
    :44 K02avahi-daemon -> ../init.d/avahi-daemon
    lrwxrwxrwx   1 root root    15 Dec 14 01
    :29 K02mysql -> ../init.d/mysql
    lrwxrwxrwx   1 root root    25 Dec  5 20
    :40 K02network-manager -> ../init.d/network-manager
    lrwxrwxrwx   1 root root    19 Dec  5 19
    :50 S01killprocs -> ../init.d/killprocs
    lrwxrwxrwx   1 root root    14 Dec  5 19
    :50 S01motd -> ../init.d/motd
    lrwxrwxrwx   1 root root    18 Dec  7 00
    :23 S22bootlogs -> ../init.d/bootlogs
    lrwxrwxrwx   1 root root    16 Dec  7 00
    :23 S23single -> ../init.d/single 
    همونطور که میبینید بعضی اسم ها با s شروع شده و بعضی با k و یک شماره بعد از آن آمده که معنی آنها به این صورت میباشد :
    s مخفف start هست یعنی وقتی رفتی داخل اول ران لول اون سرویس رو استارت کن. برای مثال : (S23single)
    k مخفف kill هست یعنی خاموش کن یعنی وقتی وارد اون ران لول شدی اون سرویس رو برای من off کن. برای مثال : (K02mysql)
    شماره ها هم ترتیب اجرا شدن سرویس ها میباشد. وقتی شما یه سرویسی رو میخواین ران کنید برای مثال dns server یا dhcp server قبلش سرویس network باید ران شده باشه وگرنه نمیتونه اجرا کنه.

    برای عوض کردن ران لول ها میتونید از دستور init و یا telinit شماره ران لول استفاده کنید و با استفاده از دستور update-rc.d میایم و عملیات مدیریت این سرویس ها رو انجام میدیم برای اطلاعات بیشتر میتونید با استفاده از دستور man این کار رو انجام بدین. که سعی میکنم در پست های بعدی به این موضوع هم بپردازم.


    معرفی انواع سطوح اجرایی در Linux و Unix :

    سطوح اجرای استاندارد :

    شناسه نام
    توضیح
    0 توقف و خاموشی سیستم را خاموش میکند.
    S مد تک کاربره رابط های شبکه را پیکربندی نمی کند و دمون ها (سرویس ها) را شروع نمی کند. سطح اجرایS یا ۱.۱
    6 راه اندازی مجدد (ریبوت) سیستم را راه اندازی مجدد می کند.

    لینوکس / Linux :
    سیستم عامل لینوکس می تواند با استفاده از برنامه های پروژه ی sysvinit از سطوح اجرا استفاده کند. پس از اینکه هسته ی لینوکس بوت می شود، برنامه ی init فایل ‎/etc/inittab را می خواند تا رفتار هر سطح اجرا را دریابد. در صورتی که کاربر مقدار دیگری را به عنوان پارامتر بوت هسته تعیین نکرده باشد، سیستم سعی خواهد کرد تا به سطح اجرای پیش فرض وارد شود.


    سطوح اجرای معمول در لینوکس :
    توزیع های اصلی لینوکس توافق کرده اند که سطوح اجرای زیر را به عنوان بخشی از مشخصات «مبنای اساسی لینوکس»۲ تعریف کنند:


    سطوح اجرایی معمول در لینوکس :

    شناسه نام توضیح
    0 توقف سیستم سیستم را خاموش می کند
    1 مد تک کاربره۳ مد وظایف مدیریتی
    2 مد چندکاربره رابط های شبکه را پیکربندی نمی کند و سرویس های شبکه را export??? / استخراج؟؟؟ نمی کند
    3 مد چندکاربره با شبکه۱ سیستم را به طور معمول شروع می کند
    4 بلااستفاده/قابل تعریف توسط کاربر برای مقاصد خاص
    5 سیستم را به طور معمول و به همراه مدیر نمایش مناسب شروع می کند (با رابط کاربری گرافیکی) همان سطح اجرای ۳ + مدیر نمایش
    6 راه اندازی مجدد (ریبوت) سیستم را راه اندازی مجدد می کند

    لینوکس دبیان / Debian :
    دبیان، به همراه توزیع های مبتنی بر آن، مثل روزهای اول اوبونتو، بین سطوح ۲ تا ۵ تمایزی قائل نمی شود.

    سطوح اجرایی لینوکس در دبیان :

    شناسه توضیح
    0 توقف (خاموش کردن سیستم)
    1 مد تک کاربره
    2-5 چندکاربره ی کامل به همراه اعلان ورود به سیستم کنسول و همینطور مدیر نمایش اگر نصب شده باشد.
    6 راه اندازی مجدد

    اوبونتو / Ubuntu :
    اوبونتوی 6.10 (Edgy Eft) به بعد به عنوان پروسه ی سنتی init از Upstart استفاده می کنند، ولی این توزیع ها هنوز از اسکریپت های سنتی اینیت و ابزار سازگاری با SysV-rc ِ آپستارت برای شروع بیشتر سرویس ها و شبیه سازی سطوح اجرا استفاده می کنند.

    لینوکس ردهت و فدورا :
    ردهت و بیشتر مشتقاتش (مثل CentOS) از سطوح اجرا به شیوه ی زیر استفاده می کنند:

    سطوح اجرای لینوکس ردهت / Redhat و فدورا / Fedora :

    شناسه توضیح
    0 توقف سیستم
    1 مد تک کاربره
    2 مد چندکاربره با امکان ورود به سیستم تنها از طریق کنسول (بدون شبکه)
    3 مد چندکاربره با امکان ورود به سیستم تنها از طریق کنسول
    4 بلااستفاده / قابل تعریف توسط کاربر
    5 مد چندکاربره با مدیر نمایش بعلاه ی لاگین از طریق کنسول (X11)
    6 راه اندازی مجدد
    اینکه چه سرویس هایی در چه سطوح اجرایی شروع می شوند را می توان با ابزار chkconfig مدیریت کرد که پیکربندی اش را تحت ‎/etc/rc.d نگه می دارد. ‎/sbin/chkconfig –list تمام سرویس هایی را که توسط chkconfig کنترل می شوند را فهرست می کند و نشان می دهد که در هر سطح اجرا سرویس ها خاموش یا روشن هستند. تنظیم سرویسِ A که توسط chkconfig کنترل می شود برای سطوح X و Y و Z به سادگی زیر است: /sbin/chkconfig –level A on
    لینوکس سوزی :
    سوزی از تنظیماتی مشابه ردهت استفاده می کنند.

    سطوح اجرای لینوکس سوزی / Suse :

    سرویس هایی که تحت یک سطح اجرای خاص اجرا می شوند را می توان با ‎YaST | System Services (runlevel)I یا با فرمان chkconfig مثل توزیع های مبتنی بر ردهت تغییر داد.

    سطوح اجرای لینوکس اسلکور / Slackware :

    شناسه توضیح
    0 توقف سیستم
    1 مد تک کاربره
    2 بلااستفاده ولی درست مثل سطح اجرای ۳ پیکربندی شده است
    3 مد چندکاربره بدون مدیر نمایش
    4 مد چندکاربره با مدیر نمایش
    5 بلااستفاده ولی درست مثل سطح اجرای ۳ پیکربندی شده است
    6 راه اندازی مجدد

    سطوح اجرای لینوکس آرچ / Arch :

    شناسه توضیح
    0 توقف سیستم
    1 تک کاربره (مد نگه داری و تعمیرات)
    2 بلااستفاده
    3 چندکاربره
    4 بلااستفاده
    5 چندکاربره با X11
    6 راه اندازی مجدد

    سطوح اجرای لینوکس جنتو / Gentoo :

    شناسه توضیح
    0 توقف سیستم
    1 مد تک کاربره
    2 مد چندکاربره بدون شبکه
    3 مد چندکاربره
    4 آلیاس شده به سطح اجرای ۳
    5 آلیاس شده به سطح اجرای ۳
    6 راه اندازی مجدد

    یونیکس / Unix :

    سیستم ۵ انتشارهای ۳ و ۴

    سطوح اجرای سیستم 5 :

    شناسه توضیح
    0 خاموش کردن سیستم، قطع برق سیستم اگر سخت افزار از آن پشتیبانی کند (تنها از کنسول قابل دسترسی است)
    1 مد تک کاربره، همه ی فایل سیستم ها بجز root پیاده می شوند، و همه ی پروسه ها بجز پروسه های کنسول کشته می شوند
    2 مد چندکاربره
    3 مد چندکاربره با پشتیبانی از فایل سیستم های export شده ی RFS (و NFS در انتشار ۴)
    4 چندکاربره، قابل تعریف توسط کاربر
    5 توقف سیستم و go to firmware???
    6 راه اندازی مجدد
    S,s به سطح 1 یکی است جز اینکه ترمینال جاری به عنوان کنسول سیستم عمل می کند

    سطوح اجرای سولاریس /Solaris :

    شناسه توضیح
    0 توقف سیستم عامل؛ رفتن به اعلان OpenBoot (فقط SPARC)
    1 مد تک کاربره که در آن فقط فایل سیستم root سوار می شود (به عنوان فقط خواندنی)
    2 مد تک کاربره که در آن همه ی فایل سیستم های محلی سوار می شوند (خواندن و نوشتن)
    3 مد چندکاربره؛ درست مانند سطح ۲ (سطح اجرای ۳ هر دو فایل ‎/sbin/rc2 و ‎/sbin/rc3 را اجرا می کند)، به علاوه ی اینکه فایل سیستم ها export می شوند و بعضی سرویس های شبکه شروع می شوند
    4 مد چندکاربره ی جایگزین، قابل تعریف توسط کاربر
    5 خاموش کردن سیستم، قطع برق اگر سخت افزار از آن پشتیبانی کند
    6 راه اندازی مجدد

    HP-UX :

    سطوح اجرای HP-UX :
    شناسه توضیح
    S توقف سیستم
    s مد تک کاربره، سیستم فقط به درون کنسول بوت می شود و در این سطح تنها فایل سیستم root سوار می شود (فقط خواندنی)
    0 مد تک کاربره، درست مانند S بجز اینکه ترمینال جاری به عنوان کنسول سیستم عمل می کند
    1 مد تک کاربره که در آن فقط فایل سیستم های محلی سوار می شوند (خواندنی-نوشتنی)
    2 مد چندکاربره که در آن بیشتر دمون ها (سرویس ها) شروع می شوند و Common Desktop Environment اجرا می شود
    3 درست مانند سطح ۲، در این سطح NFS اکسپورت می شود
    4 مد چندکاربره که در آن VUE به جای CDE شروع می شود
    5,6 بلااستفاده/قابل تعریف توسط کاربر

    FreeBSD، اOpenBSD و NetBSD :
    مشتقات بی اس دی از مفهوم سطوح اجرا استفاده نمی کنند با وجود این در برخی نسخه ها init(8)I سطوح اجرای متداول را شبیه سازی می کند.

    AIX :
    AIX از مشخصات سطوح اجرای سیستم ۵ انتشار ۴ (SVR4) پیروی نمی کند. در این سیستم عامل سطوح اجرا از ۰ تا ۹ و همینطور a تا c قابل استفاده است. 0 و 1 رزور شده اند، ۲ مد چندکاربره ی عادی است و سطوح اجرای از ۳ تا ۹ آزادند و می توانند توسط مدیر سیستم تعریف شوند. سطوح اجرای از a تا c اجازه ی اجرای پروسه ها را بدون کشتن پروسه های در حال اجرا در سطحِ دیگر را می دهند.

    AIX :

    سطوح اجرای AIX :

    شناسه نام توضیح
    0 رزرو شده
    1 رزرو شده
    2 مد چند کاربره عادی مد پیش فرض
    با تشکر از مهندس طاهری
    منبع با کمی دخل و تصرف

    پایان
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-17-2017, 04:56 PM.

    #2
    مدیریت runlevel ها

    دستورات مربوط به runlevel ها به شرح زیر میباشد:
    برای اینکه بدونیم در حال حاضر در چه ران لوی هستیم از دستور زیر استفاده میکنیم:
    کد PHP:
    root@localhost:~# runlevel 
    N 2 
    همونطور که در مثال بالا میبینید ما در runlevel 2 هستیم. در debian کلا در runlevel 2 بالا میاید و اینکه چرا با زدن دستور runlevel یک N کنار 2 هست به این دلیله که از زمان بوت سیستم فقط در ران لول 2 بوده ایم. در حقیقت این N یعنی هیچ وقت از زمان بوت ما ران لول رو تغییر ندادیم. برای درک بهتر این موضوع شما میتوانید دستور init را استفاده کنید تا runlevel خود را به 3 تغییر بدید و سپس به runlevel 2 برگردید:
    کد PHP:
    root@localhost:~# init 3
    root@localhost:~# init 2
    root@localhost:~# runlevel 
    3 2 
    همانطور که میبینید بعد از تغییر runlevel بعد از زدن دستور runlevel دیگر N ندیدیم و به جای اون 3 (runlevel قبلی) را به ما نمایش میده.

    کامند who با آپشن r نشان دهنده runlevel حال و قبل سیستم ماست. یعنی ران لول جاری و یک runlevel ما قبل آن که ما استفاده میکردیم:
    کد PHP:
    root@localhost:~# who -r
             
    run-level 2  2015-02-12 16:59                   last=
    همانطور که میب0ینید در حال حاظر در ران لول 2 هستیم و last=3 بیانگر runlevel قبلی ما میباشد.

    اولین اسکریپتی که بعد از init روی سیستم اجرا میشه اسکریپت rc.sysinit میباشد. در مطلب بالا در مورد فایل inittab توضیحاتی دادیم و گفتیم تنظیمات مربوط به process ها و runlevel ها را در این فایل قرار بدیم. با دستور زیر این فایل را باز میکنیم:
    کد PHP:
    vim /etc/inittab 
    همانطور که میبینید فرمت تعریف و ترتیب runlevel ها به صورت زیر میباشد:
    کد PHP:
    <id>:<runlevels>:<action>:<process
    در فایل سیستم من ترتیب ران لول ها به این صورت میباشد:
    کد PHP:
    l0:0:wait:/etc/init.d/rc 0
    l1
    :1:wait:/etc/init.d/rc 1
    l2
    :2:wait:/etc/init.d/rc 2
    l3
    :3:wait:/etc/init.d/rc 3
    l4
    :4:wait:/etc/init.d/rc 4
    l5
    :5:wait:/etc/init.d/rc 5
    l6
    :6:wait:/etc/init.d/rc 6 
    به جای id که از یک عدد یا یک رشته حرف استفاده میکنیم مانند l0
    دوم ران لول در حقیقت نمایشگر runlevel هست که پروسس در آن اجرا میشود. مانند 2 که نمایشگر runlevel 2 هست.
    نکته: اگر در این فیلد چیزی قرار ندهیم نمایشگر تمامی runlevel هاست. یعنی پروسس مورد نظر در تمامی ران لول ها اجرا شود.

    action در حقیقت عملکردیست که میخواهیم مثلا همیشه در همه ران لول ها یا در runlevel خاص اجرا شود.
    مانند respawn (اکشنی برای سرویس ها که همیشه در حافظه بماند)
    عملکرد این اکشن action
    پروسس رو زمانی که پایان میابد ریستارت میکند معمولا برای پروسس های getty مورد استفاده قرار میگیرد که برای مانیتور لاگین ها میباشد. respawn
    پروسس را به محض اینکه به ران لولی خاص وارد میشود استارت میکند و منتظر خاتمه پروسس قبل از init می ماند. wait
    پروسس را به محض اینکه به ران لولی خاص وارد میشود استارت میکند. once
    مشخص کننده ران لولی هست که بعد از بوت سیستم به آن وراد میشویم. initdefault
    پروسس مربوطه را هنگامی که init سیگنال SIGINT دریافت میکند اجرا کرده به طور مثال زمانی که کسی در کنسول سیستم کلید های CTRL-ALT-DEL را فشار میدهد. ctrlaltdel
    و چهارمین مورد process:
    که برای این مورد در حقیقت پروسسی را که مد نظر داریم قرار میدهیم که قرار است در یکی از اکشن های بالا اجرا شود.
    مثلا نرم افزاری داریم که میخواهیم همیشه در حافظه باشد:
    respawn radar program#

    کد PHP:
    rad::respawn:/tmp/radar 
    برای مدیریت بهتر runlevel ها از دستور chkconfig استفاده میکنیم که به صورت دیفالت در توزیع های دبیان مانند ubuntu نصب نیست و باید با دستور زیر نصب شود:
    کد PHP:
    apt-get install chkconfig 
    نحوه استفاده از دستور update-rc.d برای stop و یا start کردن runlevel ها در یک سرویس:
    البته نرم افزار دیگری در دبیان داریم که مدیریت ران لول ها را تا حدودی انجام میده به نام update-rc.d
    نحوه استفاده از این دستور:
    کد PHP:
    update-rc.d apache2 stop 345 
    که سرویس آپاچی را در لول های 3 , 4 و 5 غیرفعال یا stop میکند.
    ویا مثلا برای اینکه سرویس ssh را در لول 1 هم فعال کنیم:
    کد PHP:
    update-rc.d ssh start 1 
    البته نرم افزار update-rc.d مانند chkconfig آپشن list-- ندارد که این آپشن به ما لیست تمام ران لول های اسکریپت های سیستم رو نمایش میده. مثلا برای دیدن اینکه مثلا سرویس mysql در کدام یک از runlevelها on هست از دستور زیر استفاده میکنیم:
    کد PHP:
    root@localhost:~# chkconfig --list mysql
    ssh                       0:off  1:off  2:on   3:on   4:on   5:on   6:off 
    کد PHP:
    root@localhost:~# chkconfig --list nagios3 
    nagios3                   0:off  1:off  2:on   3:on   4:on   5:on   6:off 
    مشاهده لیست تمامی سرویس ها و runlevel های آنها:
    برای اینکه runlevel تمام process های موجود در سیستم رو بررسی کنیم یعنی اینکه ببینیم تمام process های موجود در سیستم در کدام یک از runlevel ها اجرا میشود دستور زیر را وارکنید:
    لیست بخشی از process های من :)
    کد PHP:
    root@localhost:~# chkconfig --list
    acpi-fakekey              0:off  1:off  2:on   3:on   4:on   5:on   6:off
    acpi
    -support              0:off  1:off  2:on   3:on   4:on   5:on   6:off
    acpid                     0
    :off  1:off  2:on   3:on   4:on   5:on   6:off
    alsa
    -utils                0:off  1:off  2:off  3:off  4:off  5:off  6:off  S:on 
    anacron                   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
    atftpd                    0
    :off  1:off  2:on   3:on   4:on   5:on   6:off
    avahi
    -daemon              0:off  1:off  2:on   3:on   4:on   5:on   6:off 
    همانطور که میبینید mysql و نرم افزار مانیتورینگ nagios در ران لول های 2 3 4 5 on میباشد.

    چک کردن وضعیت یک سرویس خاص در runlevel ها:
    برای اینکه از بین این process ها پراسس خاصی رو بررسی کنید از یکی از دستورات زیر استفاده کنید:
    اول استفاده از دستور grep:
    کد PHP:
    root@localhost:~# chkconfig --list |grep ssh
    ssh                       0:off  1:off  2:on   3:on   4:on   5:on   6:off 
    و دوم همانطور که در بالا گفته شد:
    کد PHP:
    root@localhost:~# chkconfig --list zabbix-agent 
    zabbix-agent              0:off  1:off  2:on   3:on   4:on   5:on   6:off 
    برای اینکه process را در runlevel خاصی start و یا stop کنیم:

    start کردن یک service یا process در یک runlevel خاص:
    مثلا میخوام httpd را در runlevel های 3 و 5 اجرا کنم:
    کد PHP:
    chkconfig --level 35 httpd on 
    متوقف کردن یک service یا process در یک runlevel خاص:
    ویا مثلا میخواهیم ssh را در ران لول 4 stop کنیم:
    کد PHP:
    chkconfig --level 4 ssh off 
    همانطور که فهمیدید در کامند بالا به جای یک runlevel میتوانیم process را در چندین runlevel و یا حتی در همه runlevel ها on و یا off کنیم. (اگر بخواهیم همه runlevel ها را لحاظ کنیم باید بنویسیم 0123456)

    چه سرویس هایی در runlevel 5 اجرا میشوند:
    حالا میخواهیم بدانیم که چه process های در runlevel 5 اجرا میشوند:
    کد PHP:
    [root@localhost ~]# chkconfig --list |grep 5:on
    acpid              0:off    1:off    2:on    3:on    4:on    5:on    6:off
    asterisk           0
    :off    1:off    2:on    3:on    4:on    5:on    6:off
    atd                0
    :off    1:off    2:off    3:on    4:on    5:on    6:off
    auditd             0
    :off    1:off    2:on    3:on    4:on    5:on    6:off
    crond              0
    :off    1:off    2:on    3:on    4:on    5:on    6:off
    cyrus
    -imapd        0:off    1:off    2:off    3:on    4:on    5:on    6:off
    dahdi              0
    :off    1:off    2:on    3:on    4:on    5:on    6:off
    elastix
    -firstboot    0:off    1:off    2:on    3:on    4:on    5:on    6:off
    elastix
    -portknock    0:off    1:off    2:on    3:on    4:on    5:on    6:off
    elastix
    -updaterd    0:off    1:off    2:on    3:on    4:on    5:on    6:off
    haldaemon          0
    :off    1:off    2:off    3:on    4:on    5:on    6:off
    httpd              0
    :off    1:off    2:off    3:on    4:on    5:on    6:off 
    همانطور که میبینید در تمامی process های بالا در runlevel 5 هستند.

    چه سرویس هایی در runlevel 4 اجرا نمیشوند:
    یا برعکس مثلا میخواهیم بدانیم در runlevel 4 چه process هایی off هستند:

    کد PHP:
    [root@localhost ~]# chkconfig --list |grep 4:off
    LCDd               0:off    1:off    2:off    3:off    4:off    5:off    6:off
    dc_client          0
    :off    1:off    2:off    3:off    4:off    5:off    6:off
    dc_server          0
    :off    1:off    2:off    3:off    4:off    5:off    6:off
    dhcdbd             0
    :off    1:off    2:off    3:off    4:off    5:off    6:off
    dhcpd              0
    :off    1:off    2:off    3:off    4:off    5:off    6:off
    dhcrelay           0
    :off    1:off    2:off    3:off    4:off    5:off    6:off
    fail2ban           0
    :off    1:off    2:off    3:off    4:off    5:off    6:off
    lcdelastix         0
    :off    1:off    2:off    3:off    4:off    5:off    6:off
    mailman            0
    :off    1:off    2:off    3:off    4:off    5:off    6:off 
    تغییر سطح runlevel ها با دستور init :
    سطح خود را با کامند init میتوانید تغییر دهید.
    کد PHP:
    init 1 
    این دستور شما را به حد single user میبرد.

    کد PHP:
    init 0 
    این دستور سیستم را خاموش میکند در حقیقت دستوری معادل دستور shutdown میباشد ولی دستور shutdown خطرناک بوده و اکیدا توصیه میشود برای خاموش کردن سیستم از دستور init 0 استفاده کنید. از آنجایی که دستور shutdown یا halt همانند کلید پاور روی کیس رفتار میکند و به نرم افزارهای باز شما اجازه نمیدهند که کارشان را به اتمام برسانند و به محض زدن کامند تمامی برنامه ها shutdown میشود.

    کد PHP:
    init 6 
    این دستور سیستم را reboot میکند و دقیقا معادل دستور reboot هم میباشد ولی طبق آنچه که برای shutdown گفته شد دستور reboot هم توصیه نمیشود و تا حد ممکن از init 6 استفاده کنید.

    کد PHP:
    telinit q 
    این دستور با گزینه q ما را به init پیش فرض سیستم میبرد مثلا در debian زدن این دستور ما را به init2 خواهد برد.

    موفق باشید.


    اختصاصی منطقه لینوکسی ها:
    کپی برداری با کمی تغییر در متن به هیچ وجه قابل قبول منطقه لینوکسی ها نیست.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 02-13-2015, 12:31 AM.

    کامنت

    درباره انجمن منطقه لینوکسی ها

    انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

    شبکه های اجتماعی

    ایمیل مدیریت

    Habili@linux-zone.org

    در حال انجام ...
    X