systemd در دبیان (شماره نهایی)

در شماره پیش با مفاهیم systemd آشنا شدیم. حداقل‌هایی برای ذهنیت اولیه کار با systemd آماده شد تا با Systemd-on-fedoraمفاهیمی مثل performance ، مهاجرت بدنه اصلی گنو/لینوکس (کل فرآیند بوت) و غیره آشنا باشد. اما چیزی که در دنیای واقعی بدان نیاز دارد دستوراتی است که بعد از درک پایه مفاهیم اصلی بدان ضرورتاً نیازمند است. در این شماره سعی شده است تا مستقل از دیسترو بدان اشاره شود. در SysV هر چیزی برای خودش Systemd-on-fedoraرشد کرده بود و تحت لوای فرآیند خاصی نبود ولی در systemd همانطور که در شماره پیشین بدان اشاره شد، همه چیز در فرآیند بوت تحت لوای systemd می‌باشد، ضرورت آنهم صرفاً یکپارچگی بوده تا به سرعت بالاتری رسد. بهتر است این متن را در ۳ قسمت توضیح دهیم:

۱. مدیریت سرویس‌ها


در SysV باید در BootSplash محتویات بوت سرویس‌ها را میدیدیم و بقیه مقادیر از بین میرفت و در log ها و با دستور ps و یا پاس کردن status به خود سرویس همانند:

باید می‌دیدیم اما در صورتی نه تنها سرویس‌ها بلکه همه منابع سیستمی را در systemd می‌توان با دستور systemctl نمایش داد، به عنوان مثال:

نکته: t- نوع unit را برای filter کردن مشخص می‌کند. همانطور که در بالا می‌بینید برای unit از نوع socket فیلتر ایجاد کردیم.
نکته: systemctl بدون پارامتر یک query کلی می‌گیرد.
به دستور زیر دقت کنید:

به دلایلی می‌توان با دستور بالا مخالفت کرد. اصل و اساس مخالفت با دستور بالا تولید زیاد داده می‌باشد. این تنها در مورد systemd نیست، بلکه در موارد متعددی منجمله netstat و یا lsof هم از طرف کاربران رعایت نمی‌شود و تولید داده اضافی می‌شود و درنهایت از آن grep گرفته می‌شود. دستور اصولی بالا بدین گونه است:

دستور بالا نه تنها به SysV یک دستور مدرن تلقی می‌شود بلکه گویای یک فریم ورک قوی از جانب systemd می‌باشد که غیر قابل انکار می‌باشد.
نه تنها می‌توان از فرمان is-active استفاده کرد بلکه برای حالت معادل سازی status می‌توان از فرمان زیر استفاده کرد:

دستوراتی به صورت سنتی در Debeian-Base و RedHat-Base ها به نام‌های update-rc.d و chkconfig وجود دارند که در systemd برای استفاده از آن‌ها دیگر نیاز به مسقیم صدا زدنشان نیست.
نکته: برای کار با یک سیستم جدید باید فرهنگ آن را نیز آموخت.
پس بدین منظور بیاد از دستورات خاصی استفاده نماییم.

بیایید کمی دستورات ساده‌ای که در SysV استفاده می‌کردیم را در systemd پیدا کنیم :
statrt کردن سرویس:

نکته: برای راحتی کار می‌توانید کلمهservice آخر را نگذارید.
برای stop و یا هر پارامتری که در SysV به یک سرویس می‌دادید می‌توانید از همین روش استفاده کنید:

یا از دستور زیر استفاده نمایید:

نکته: اگر با توزیع‌های RedHat-Base کار کرده باشید خواهید دریافت که دستور service ، دستور جدیدی نیست ولی از وجود systemd به این طرف بازنویسی شده است. ولی در توزیع‌های Debian-Base وجود نداشته است.

اگر کاربر سیستم‌های RedHat-Base باشید با دستور chkconfig و اگر کابر سیستم‌های Debian-Base باشید با دستور update.rc-d حتماً آشنا هستید. در بخش فرمان‌های متعلق به سرویس دو فرمان enable و disable به صورت زیر به کار خواهند رفت:

در‌واقع عبارت فوق همانند دو دستور بالا کار می‌کند و باعث می‌شود سرویس cups در هنگام boot
اجرا شود. فرمان disable معکوس آن عمل می‌کند. اما کمی در آن وارد جزییات شویم:

نکته: تمام unit فایل‌ها در دایرکتوری /lib/systemd/system/ قرار دارند. (منظور همان ۷ نوع unit ی می‌باشد که در شماره قبل صحبت شد و systemd بر مبنای آنان کار می‌کند.) وقتی می‌گوییم یک سرویس به صورت اتوماتیک اجرا شود systemd از آن unit مربوطه یک symbolic link از آن در دایرکتوری /etc/systemd/system/ و بعضی از زیر دایرکتوری‌های آن می‌سازد.
ممکن است برای فرمان بالا چنین خروجی دریافت نمایید،‌ که این نشانگر این است که شما یکبار آن را enable کرده‌اید:

برای اینکه بفهمید یک سرویس enable شده است یا خیر از فرمان زیر استفاده نمایید:

پیشنهاد systemd به جای استفاده از enable و disable:
systemd خود پیشنهاد می‌دهد به جای disable از mask و از به جای enable از unmask استفاده نماییم:

در‌واقع با mask کردن یک لینک به dev/null/ ایجاد کردیم و آن را از حالت اتو استارت درآوردیم.
و unmask عکس این حالت را انجام می‌دهد:

۲. کار با Targetها

بر فرض اینکه در نسخه پیش توضیح داده شد که target ها چی ‌میباشند به جزییات در مورد آن‌ها می‌پردازیم.
اگر به جای دستور

از فرمان ls به صورت زیر استفاده کنیم خیلی موارد برایمان روشن می‌شود:

می‌توانیم به خیلی از حقایق پی ببریم.
به جای فرمان runlevel در systemd باید از فرمان زیر استفاده نماییم:

با توجه به لینک‌های بالا متوجه شدید که مدیریت runlevel ها به چه صورت می‌باشد.
نکته: مهاجرت عظیمی که systemd داشت، از اجرای فایلی به درون کدی بود که در شماره پیش توضیح دادم. همین امر یکی از عواملی بود که سرعت systemd را به طرز فاحشی بالا برد.
برای تغییر runlevel جاری می‌توان از فرمان زیر استفاده نمود:

برای وارد شدن به single user در SysV با فرمان init 1 این امر را انجام می‌دادیم، اما در systemd با فرمان زیر این کار را انجام می‌دهیم:

توصیه: برای بیشتر یادگرفتن systemd دایرکتوری /lib/systemd/system/ را هک کنید.

۳. فرمان‌های کلیدی

در لینوکس و حتی بعضا در بعضی از بونیکس های بعضی از فرمان‌های زیر صادق بودند که هنوز هم هستند، ولی معادل systemd آن‌ها برایتان لیست شده است:

فرمان قدیمی فرمان مطابق با systemd توضیحات
halt systemctl halt سیستم رو halt می‌کند.
poweroff systemctl poweroff سیستم را power off می‌کند.
reboot systemctl reboot سیستم را reboot می‌کند.
pm-suspend systemctl pm-suspend سیستم را suspend می‌کند.
pm-hibernate systemctl pm-hibernate سیستم را hibernate می‌کند.
pm-suspend-hybrid systemctl pm-suspend-hybrid سیستم را hibernate و suspend-hybird می‌کند.

نکته: سعی کنید وقتی از systemd استفاده می‌کنید فرامین سنتی را استفاده نکنید و از فرمامینی همچون: systemd-cgls و غیره استفاده نمایید.

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

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *