سرويس ها در لينوکس


 






 
لينوکس به هنگام بوت، تعدادي سرويس (Service) سيستمي را راه اندازي مي کند که کارهاي گوناگوني را انجام مي دهند. اين پراسس ها (1) تقريباً معادل سرويس هاي ويندوز هستند، اما عمليات آنها در لينوکس متفاوت است. در لينوکس، زمان کل گروه هاي سرويس ها - که در عمليات راه اندازي بار مي شوند- و حتي ترتيب دقيق به اجرا در آمدن آنها را مي توانيد کنترل کنيد. تحت شرايط ويژه، بعضي از نگارش هاي لينوکس به شما امکان مي دهند که مشخص کنيد که کدام پراسس ها به اجرا در آيند. رفتار هر نوع پراسس مربوط به استارت آپ (2) را به آساني مي توانيد تغيير بدهيد، يا پراسس ها را به آساني مي توانيد اضافه يا حذف کنيد.

در خدمت شما
 

هنگامي که کامپيوتر را روشن مي کنيد، کامپيوتر براي بوت کردن لينوکس يک رشته عمليات مشخص را انجام مي دهد. اولين کاري که هسته يا کرنل (3) لينوکس در زمان استارت آپ انجام مي دهد اجراي برنامه init است. اين برنامه همه سرويس هاي سيستمي را راه اندازي مي کند، و در نهايت همان چيزي را به اجرا در مي آورد که اکثر مردم فکر مي کنند لينوکس است. برنامه init را فايل etc/inittab/ کنترل مي کند، که حاوي اطلاعات کافي براي اداره امور لينوکس است.
فايل inittab به init مي گويد که تنظيم هاي پايه سيستمي، مانند runlevel پيش فرض را چگونه برپا کند. يک runlevel با عدد جلوي خود به لينوکس مي گويد که کدام گروه از سرويس ها بايد به اجرا در آيد و چگونه بايد رفتار کند. runlevel ها معمولاً از 0 ( خاموش سازي) تا 6 ( بازبوت کردن سيستم) شماره گذاري مي شوند. اکثر نگارش هاي لينوکس runlevel را روي 3 يا 5 ميزان مي کنند. runlevel 3 و runlevel 5 هر دو به کاربران ديگر امکان مي دهند که به حساب خود وارد شوند، و هر دو شبکه را فعال مي کنند؛ runlevel 3 يک ارتباط متني با سيستم عامل را فراهم مي کند، در حالي که runlevel 5 يک ارتباط گرافيکي با سيستم عامل را فراهم مي کند. runlevel 1، که به حالت تک کاربري مشهور است، همه سرويس ها، و شبکه را غير فعال مي کند، و به کاربران ديگر اجازه نمي دهد که وارد حساب خود شوند. در نتيجه، براي بازسازي و تعمير سيستم عامل اغلب از اين runlevel بهره گرفته مي شود.


 

هنگامي که لينوکس به runlevel پيش فرض خود مي رود، کدهاي استارت آپي را بار مي کند که سرويس هاي سيستمي را اجرا مي کنند. همه کدهاي استارت آپ معمولاً در ديرکتوري etc/init.d/ قرار دارند، اما هميشه همه آنها به اجرا در نمي آيند. در اين ديرکتوري، ديرکتوري هايي به نام rc#.d خواهيد يافت، که در آنها «#» عددي بين 0 و 6 است. هنگامي که لينوکس به يک runlevel ويژه مي رود، همه کدهاي استارت آپ واقع در دايرکتوري rc مخصوص آن runlevel را اجرا مي کند. در نتيجه، اگر يک سيستم لينوکس با runlevel 5 بوت کند، init شروع به اجراي کدهاي واقع در etc/init.d/rc5.d/ مي کند. در پاره اي از موارد، ديرکتوري هاي rc#.d در خود ديرکتوري etc/ جاي دارند.
اگر به داخل هريک از ديرکتوري هاي rc نگاه کنيد، متوجه اسکريپت هايي (4) خواهيد شد که لينک هايي به اسکريپت هاي واقع در etc/init.d/ هستند. اگر يک اسکريپت يک سرويس را انجام بدهد عمليات آسان تر مي شود، چون هرگاه به آن سرويس ويژه نياز داشته باشيد به آن لينک خواهيد کرد. به عنوان مثال، نظر به اين که در بسياري از مواقع دستيابي شبکه لازم است، يک اسکريپت براي دستيابي به شبکه وجود دارد. در نتيجه، براي runlevelهاي مختلفي که در آنها مي خواهيد بتوانيد از شبکه استفاده کنيد کافي است به آن اسکريپت لينک کنيد. فرض کنيد اسکريپت استارت آپ اختصاصي خودتان را با نام «myscript» در ديرکتوري etc/init.d/ ساخته ايد. اگر بخواهيد myscript در runlevel 5 به اجرا در آيد، بايد به ديرکتوري etc/init.d/rc5.d/ برويد و عبارت زير را تايپ کنيد:
In-s../myscript./S99myscript
اين فرمان، myscript را پس از اسکريپت هاي ديگر در runlevel5 اجرا مي کند.


 

چيز ديگري که در هر دايرکتوري rc متوجه خواهد شد آن است که همه اسکريپت ها با يک « S» يا با يک «K» شروع مي شوند و در پي آنها يک شماره مي آيد. اسکريپت هاي S اسکريپت هايي هستند که هنگامي که لينوکس وارد يک runlevel مي شود آغاز مي شوند، در حالي که اسکريپت هاي K هنگامي به اجرا در مي آيند که لينوکس يک runlevel را ترک مي کند. شماره اي که مي آيد نشان دهنده ترتيب اجراي اسکريپت است. به عنوان مثال، اسکريپت S01 پيش از اسکريپت S20 اجرا خواهد شد.
اما هنگامي که لينوکس وارد يک runlevel مي شود اين اسکريپت ها چگونه در مي يابند که بايد اجرا شوند يا نبايد کاري کنند؟ هنگامي که init هر يک از اسکريپت هاي استارت آپ را پردازش مي کند، يک فرمان start يا stop مي فرستد. به عنوان مثال، اگر به اسکريپت استارت آپ etc/init.d/ خود نگاه کنيد، کد جستجو کننده فرمان هاي start و stop را در آن خواهيد ديد.هرگاه يک اسکريپت استارت آپ، فرمان مربوط به خود را از init دريافت کند اين بخش فرمان هاي start و stop از کد دقيقاً آنچه را بايد رخ دهد مي گويد.


 

در بعضي از نگارش هاي لينوکس، ممکن است فايل inittab حضور نداشته باشد، اما نگران نشويد. نگارش هاي لينوکس Ubuntu، RedHat ، و مشتقات آنها از يک جايگزين init مشهور به Upstart بهره مي گيرند. هدف Upstart آن است که چيزي انعطاف پذيرتر و قدرتمندتر از آنچه باشد که در حال حاضر فراهم مي شود. با init، هنگامي که لينوکس به يک runlevel ويژه مي رود اسکريپت هاي استارت آپ به اجرا در مي آيند، اما Upstart اسکريپت ها را بر بنياد رويدادهاي سيستمي اجرا مي کند. اگر بخواهيد runlevel پيش فرض براي سيستم عامل خود را تغيير بدهيد، اما فايل inittab وجود نداشته باشد، فايل -etc/event.d/rc-default را مي توانيد اصلاح کنيد.
در اين نگارش ها، يک استارت آپ اضافي، etc/rc.local/ ، وجود دارد که در اواخر عمليات بوت اجرا مي شود. هدف rc.local راه اندازي سرويس هايي در يک سيستم است که فقط براي آن سيستم خاص بومي هستند. در نتيجه، در جايي که اسکريپت هاي rc ممکن است در ميان چند ماشين در يک محيط خاص مشترک باشند، rc.local بايد «سيستم- ويژه» يا وابسته به سيستم باشد.

اجراي سرويس ها پس از بوت شدن لينوکس
 

پس همه اينها چه چيزي به جز نحوه راه اندازي سرويس هاي سيستمي لينوکس به ما مي گويند؟ runlevelها فقط در زمان راه اندازي لينوکس به کار نمي روند؛ آنها به دلايل گوناگون مي توانند در هر زماني به کار بروند. به عنوان مثال، اگر بخواهيد رانش گر(5) کارت گرافيک تان را ارتقا بدهيد، نصب رانش گر ممکن است از شما را بخواهد که GUI در حال اجراي کنوني را ببنديد.آسان ترين روش اجراي اين کار سوئيچ کردن از runlevel 5 (ارتباط گرافيکي با سيستم عامل) به runlevel 3 ( ارتباط متني با سيستم عامل) است. اگر بخواهيد عمليات نگهداري را روي يک سرور(6) انجام بدهيد، براي اطمينان يافتن از اين که هيچ کس فايل هايي را که شما روزآمد مي کنيد باز نخواهد کرد مي توانيد از runlevel 5 به runlevel 2 برويد.
امکان رفتن از يک runlevel به runlevel ديگر خصوصيتي است که کاربران ويندوز اصلاً در اختيار ندارند. در ويندوز مي توانيد در چند حالت مختلف بوت کنيد، که حالت هاي Safe Mode و normal Windows دو حالت متداول هستند. اما هرگاه به يکي از اين حالت ها بوت کنيد، ديگر نمي توانيد به حالتي ديگر برويد. در runlevelهاي لينوکس، مي توانيد با يکي از حالت هاي چند کاربري معمول، با امکانات شبکه، و GUI بوت کنيد، و هنگامي که لازم باشد، مي توانيد به حالت تک کاربري برويد.
يکي از دلايل مشکل تر بودن آلوده سازي يک کامپيوتر لينوکس در مقايسه با يک کامپيوتر ويندوز همين امکان رفتن از يک runlevel به runlevel ديگر است. حتي در Safe Mode ويندوز، تعدادي سرويس سطح پايين، مانند سرويس Event Viewer وجود دارد که باز هم اجرا مي شوند. اما هنگامي که در لينوکس به حالت تک کاربري مي رويد، فقط شما هستيد و کِرنِل يا هسته لينوکس. هيچ چيز ديگري در حال اجرا نيست. بدين معني که يک سرويس ويندوز مي تواند تعداد زيادي از پراسس ها را آلوده کند و در هر حالتي که شما بوت کنيد باز هم به اجرا در بيايد. اما براي اين که آلودگي يک سيستم لينوکس دائمي شود بايد خود کِرنِل آلوده شود.
براي مشخص کردن runlevel جاري سيستم خود، يک پنجره ترمينال را باز کنيد و
فرمان who-r را تايپ کنيد.


 

براي رفتن از يک runlevel به runlevel ديگر فرمان telinit target-runlevel را درپنجره ترمينال تايپ کنيد، که در آن target-runlevel به حالت runlevel که مي خواهيد برويد اشاره دارد. در بعضي از نگارش هاي لينوکس، فرمان telinit تشخيص داده نمي شود؛ در چنين مواردي، درمقابل، از فرمان init بهره بگيريد.


 

اکثر نگارش هاي لينوکس يک روش آسان براي اداره سرويس هاي سيستمي هر runlevel فراهم مي سازند. اگر کاربر Fedora باشيد، چنانچه روي Administration، Systems و Services کليک کنيد، همه پراسس هاي استارت آپ را خواهيد ديد. اگر يک سرويس ويژه را انتخاب کنيد، آن را مي توانيد راه اندازي، متوقف، يا باز راه اندازي کنيد. اگر بخواهيد runlevelهاي پيش فرض آن را تغيير بدهيد، روي Customize کليک کنيد. کاربران SuSE با رفتن به YaST و کليک کردن روي System و System Services امکاناتي مشابه را خواهند يافت. سپس Expert Mode را باز کنيد.


 

فرمان ها براي کاربران Ubuntu اندکي متفاوت است، اما به اين دليل نيست که از Upstart استفاده مي کند. در مقابل، هدف Ubuntu کاربران متوسط است، در حالي که هدف ساير نگارش هاي لينوکس کاربران موجود يونيکس بوده است. يعني، شما با استفاده از ابزار داخلي Ubuntu همه سرويس هاي استارت آپ را نخواهيد ديد، فقط سرويس هايي را که خيلي به شما ارتباط دارند خواهيد ديد. اگر روي Administration، System و Services کليک کنيد فقط فهرستي از برنامه هاي استارت آپ را خواهيد ديد.


 


 

اگر بخواهيد رفتار استارت آپ يک سرويس ويژه را تغيير بدهيد، روي دکمه Unlock کليک کنيد. رابط گرافيکي Ubuntu امکاني را در اختيار شما قرار مي دهد که در اکثر رابط هاي گرافيکي نگارش هاي ديگر نخواهيد يافت. با ابزاري که در نگارش هاي ديگر يافت مي شود، فقط اين امکان به شما داده مي وشد که يک سرويس را براي يک runlevel ويژه فعال يا غير فعال کنيد. با رابط Ubuntu، ترتيب استارت آپ اسکريپت ها را نيز مي توانيد از نو سازمان دهي کنيد. کافي است روي يک سرويس کليک - راست کنيد، و Properties را انتخاب کنيد، يک فهرست از runlevelهاي مختلف و Priority آنها به نمايش در خواهد آمد. تقدم براي يک سرويس شماره اي است که پس از S در اسکريپت rc مي آيد، درنتيجه، اگر يک سرويس داراي تقدم 20 باشد، يک اسکريپت S20 است. اگر روي يک تقدم ويژه کليک - دو ضرب کنيد مي توانيد تقدم آن را تغيير بدهيد.
بنابراين، درک چگونگي اجرا شدن سرويس هاي سيستمي لينوکس نبايد دشوار باشد.
پي نوشتها:

1)process
2)startup
3)kernel
4)script
5)driver
6)server
منبع:ريزپردازنده، شماره 188