منبع اصلی نوشتار زیر در این لینک قرار دارد

systemd جایگزین init در لینوکس (فدورا 20)

بطور سنتی و تا به امروز تمامی سیستم عامل های یونیکسی از جمله لینوکس init با PID=1 نخستین فرایندی است که در طی فرایند بوت شدن سیستم، ایجاد می شود. init یک فرایند پس زمینه یا Background Process (یک Daemon) است که در پس زمینه همواره در حال اجرا شدن است و دیگر فرایند ه را کنترل می کند و در واقع والد (جد) تمامی فرایند های درون سیستم است و نخستین فرایندی است که ایجاد شده و تا زمانی که سیستم Shutdown نشود باقی می ماند و آخرین فرایندی است که از بین می رود.اسکریپت های زیر دایرکتوری etc/init.d/ توسط این فرایند کنترل می شوند و می توان از دستور service برای کنترل آنها استفاده نمود. همچنین زیر دایرکتوری های etc/rcx.d/ فایلذ هایی که لینک هایی از فایل های درون دایرکتوری etc/init.d/ هستند، وجود دارند که سرویس های موجود در زمان ورود به یک سطح اجرایی را مشخص می کنند. بیشتر توزیع های لینوکسی از سبک Unix System V طبیعیت کرده اند که در بالا گفته شد ولی برخی مانند Slackware از سبک BSD طبیعیت کرده اند و برخی هم مانند Gentoo سبک سفارشی خودشان را دارند. به هر حال چندین نسخه توسعه یافته برای جایگزینی کامل با init توسعه داده شده اند که systemd و upstart هستند. نخستین توزیع لینوکسی که از systemd استفاده کرد توزیع فدورا 15 بود.

systemd یک سیستم و مدیر سرویس برای سیستم عامل لینوکس است. در فراید startup شدن سیستم عامل لینوکس از این فرایند به جای init استفاده می شود. یعنی نخستین فرایندی است که ایجاد می شود و شناسه یا PID=1 می گیرد و سپس در پس زمینه تمامی فرایند ها را کنترل می کند. systemd والد تمامی فرایند ها است و مانند init نخستین فرایندی است که ایجاد شده و آخرین فرایندی است که پایان می یابد. d پایان نام systemd معرف Daemon بودن آن است یعنی فریاندی که در پس زمینه اجرا می شود.

بر خلاف init، فرایند systemd کنترل بهتری را بر روی فرایند ها دارد. بر خلاف توزیع هایی که هم اکنون از init استفاده می کنند مانند نسخه های 5 و 6 توزیع های RHLE و CentOS در توزیع هایی که از init استفاده می کنند مانند توزیع فدورا نسخه های 15 به بعد دیگر نیم توان از دستور های service یا chkconfig استفاده نمود بلکه تنها یک دستور برای کنترل سرویس ها (و البته کنترل فرایند systemd) وجود دارد و آن دستور systemctl است که واقعا تحول و سادگی را برای کنترل سرویس ها فراهم کرده است. chkconfig برای مشخص کردن اینکه آیا فرایندی باید در سطح اجرایی خاصی در زمان بوت شده به طور خودکار فعال شود و دستور service نیز برای کنترل بر روی سرویس ها مانند restart کردن یک سرویس مورد استفاده قرار می گرفتند. اما در توزیع هایی مانند فدورا 20 که از فرایند systemd استفاده می کنند وظایف دو دستور فوق بر عهده دستور systemctl می باشد. همچنین تغییراتی در مفهوم سطح اجرایی داده شده است. در توزیع هایی که از init استفاده می کنند سطوح اجرایی مطابق با آنچه که در این مطلب گفته شده است، می باشند و تغییر آنها نیز مطابق با این پست. بر خلاف این توزیع ها که سطح اجرایی توسط خطی که شامل initdefault در فایل etc/inittab/ مسخص می شد اما در توزیع هایی که از systemd استفاده می کنند سطح اجرایی متفاوت شده و همچنین تعیین سطح اجرایی پیشفرض نیز متفاوت شده است. از دستور زیر استفاده کنید تا مشاهده کنید که فرایند systemd به عنوان والد تمامی فرایند های موجود در سیستم و با شناسه 1 است.

pstree -Ap

دستور systemd بر روی واحدها یا Unit هایی کنترل دارد که این واحد ها می توانند: سرویس ها، سوکت ها، دیوایس ها و یا نقاط اتصال باشند. برای فهرست کردن تمامی واحدها از دستور زیر استفاده کنید.

systemctl list-units

در مطلبی جداگانه به واحدها پرداخته خواهد شد. هدف از این مطلب معرفی فرایند systemd و دستور systemctl خواهد بود. همچنین به چگونگی کنترل سرویس هایی مانند sshd که پیش از این توسط دستور service انجام می شد نیز خواهم پرداخت. برای شروع از دستور systemctl برای نمایش متغیر های محلی PATH$ و LANG$استفاده می کنیم. به طور معمول باید از دو دستور زیر استفاده کنیم.

echo $PATH

echo $LANG

  • اما در فدورا 20  یا هر توزیع دیگری که از systemd استفاده می کند از دستور زیر استفاده کنید.

systemctl show-environment

OUTPUT

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8

و یا برای تغییر متغیر محیطی PATH$ و افزودن یک مسیر جدید از دستور زیر استفاده کنید.

systemctl set-environment PATH=$PATH:/games

  • برای reboot و shutdown کردن سیستم از دستور های زیر استفاده کنید.

systemctl reboot

systemctl poweroff

systemctl halt

و یا اینکه از دستور های زیر استفاده کنید.

reboot

poweroff

halt

یک Service Unit مشخص کننده یک سرویس است که به صورت یک فرایند با یک شناسه در سیستم وجود دارد مانند سرویس sshd یا سرویس آپاچی یا وب سرور که نام سرویس httpd است یا سرویس dhcp و هر سرویس دیگری. شش عمل start, stop, restart,relaod,enable و disable بر روی هر سرویس انجام می گیرد. هر سرویس عضوی از واحد service بوده و در دستور systemctl به صورت زیر مشخص می شود.

systemctl COMMAND SERVICE_NAME.service

COMMAND  یکی از چهار عمل بالا به همراه دستور status برای نمایش وضعیت یک سرویس و همچنین دستور is-active برای مشخص کردن اینکه آیا سرویس مورد نظر start یا فعال است و is-enabled برای مشخص کردن اینکه آیا سرویسی در زمان بودت شده فعال خواهد شد یا نه. البته می تانید عبارت service را در پایان نام سرویس نیز نیاورید.

systemctl COMMAND SERVICE_NAME

  • برای تعیین وضعیت یک سرویس (مانند سرویس named) از دستور زیر استفاده کنید.

systemctl status named.service

خروجی بالا دو مطلب را نشان می دهد. یکی اینکه سرویس named غیر فعال یا inactive است و اینکه سرویس در زمان بوت شدن بطور خودکار فعال یا enable نمی شود در حالت disable است). نمونه دیگری از خروجی status مانند شکل زیر است.

از خروجی شکل بالا مشخص است که سرویس فعال یا active است و قادر به پایخ گویی به درخواست ها. همچنین سرویس در زمان بوت شدن بطور خودکار فعال می شود زیر enabled شده است. شناسه مربوط به سرویس (Main PID) برابر 674.  شناسه های اصلی یعنی شناسه مربوط به فرایندی که بطور مستقیم توسط systend ایجاد شده است و بقیه شناسه ها (بطور خاص در شکل بالا برای سرویس httpd) از همان شناسه اصلی fork شده اند. برای اینکه پی ببریم آیا واقعا 674 از systemd ایجاد شده است دستور زیر را اجرا کنید. در این دستور زیر توسط سوییچ P- از فرمان pgrep شناسه فرایند هایی را فهرست می کنیم که والد یا Parent آنها فرایندی با شناسه 1 یعنی systemd باشد و با grep مطمین می شویم که آیا 674 نیز جز آنها است یا نه.

pgrep -P 1 | grep 674

خط زیر از خروجی بالا نشان می دهد که فرایند یا سرویس httpd به مدت 1 ساعت 28 دقیقه از ساعت 20:12 تاریخ 21-02-2014 فعال و در حال اجرا شدن است.

Active: active (running) since Fri 2014-02-21 20:12:10 IRST; 1h 28min ago

CGroup که مخفف Control Group است ویژگی از کرنل لینوکس است که محدودیت هایی را بر روی منابعی سیستمی مانند پردازندهُ حافظه اصلی و I/O به ازای گروهی از فرایند ها (در اینجا گروهی از فرایند های مربوط له سرویس httpd) اعمال می کند. برای مطالعه بیشتر در مستندات Red Hat به دنبال داکیومنت Resource Management بگردید. همچنین در خروجی بالا چندین خط از رکورد های Log مربوط به سرویس آپاچی را نشان می دهد.

  • فعال یا start کردن (active کردن) یک سرویس (مانند سرویس sshd در مثال زیر)

systemctl start sshd.service

  • غیر فعال یا stop کردن (inactive کردن) یک سرویس

systemctl stop sshd.service

  • بررسی اینکه آیا سرویسی فعال است. برای این کار از سدتور is-active استفاده می کنیم.در صورتی که سرویسی فعال یا در حال اجرا باشد عبارت active نشان داده می شود و اگر غیر فعال باشد عبارت inactive را نشان می دهد.

systemctl is-active httpd.service

active

systemctl is-active named.service

inactive

  • برای فعال کردن خودکار یک سرویس در زمان بوت شدن (معادل همان کاری که دستور chkconfig در توزیع های RHLE/CentOS V5,6)

systemctl enable httpd.service

systemctl enable named.service

  • و برای غیر فعال کردن آن سرویس از دستور disable استفاده کنید.

systemctl disable httpd.service

systemctl disable named.service

  • همچنین از دستور is-enabled برای اینکه بفهمیم آیا سرویسی در زمان بوت شدن به طور خودکار فعال می شود یا خیر از دستور is-enabled استفاده کنید. اگر فعال باشد عبارت enabled و اگر غیر فعال باشد عبارت disabled نشان داده می شود.

systemctl is-enable httpd.service

systemctl is-enable named.service

جدول زیر دستور service که در سبک Unix System V (یا Sysvinit) است را با دستور های معادل آن در سیستم systemd نشان می دهد.

از میان دستور های بالا تنها دستور chkconfig –list در توزیع هایی که از سیستم systemd استفاده می کنند قابل استفاده نمی باشد و برای مابقی دستور ها می تواند از معادل Sysvinit آن استفاده کنید که در این صورت دستور service یا chkconfig به معادل خودش در systemd ترجمه یا Redirect می شود و خروجی مشابه زیر نشان داده می شود.

service named start

Redirecting to /bin/systemctl start  named.service

این مطلب از مجموعه مطالب آموزشی مرتبط با فدورا 20 می باشد و تمامی دستور های بالا در محیط فدورا 20 انجام شده اند اما در تمامی توزیع هایی که از systemd قابل استفاده می باشد.



برچسب ها : , , , , ,

به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد