systemd
systemd

systemd چیست؟

systemd

systemd   یک System Manager  می باشد که در ابتدای بوت شدن سیستم پردازش آن شروع می شود و به عنوان parent  سایر process  ها شناخته می شود و به عنوان جایگزینی برای init معرفی شده است.

init  چیست؟

init  یا SysVinit در اصل یک daemon process  یا پکیج مدیریت سرویس است  که به محض روشن شدن کامپیوتر تا زمان خاموش شدن آن فعالیت می کند. در واقع init  اولین پردازشی است که پس از بوت شدن  سیستم شروع به فعالیت می کند و به عنوان والد (parent) تمام پردازش ها محسوب می شود و همیشه دارای PID براربر با ۱ می باشد.

PID1
PID1

اگر به هر دلیلی daemon مربوط به init  نتواند شروع به کار کند, هیچ پردازش یا پروسس دیگری نمی تواند شروع به کار نماید. در این صورت سیستم وارد شرایطی شده است که به آن kernel panic می گویند.

با توجه به نیاز های مختلف جایگزین هایی برای هدف  ایجاد شد که برخی از آنها به daemon process  اصلی برخی از توزیع ها در آمد. مانند ‌Upstart  که در Ubuntu پیاده سازی گردید (تا نسخه ۱۶.۰۴)  یا systemd  که در برخی از توزیع ها مانند Fedora, Open SuSE, CentOS و … پیاده سازی گردیده اند.

systemd چیست؟

systemd همانند init  یک System Manager  یا پکیج مدیریت سرویس  می باشد که در ابتدای بوت شدم سیستم پردازش آن شروع می شود و به عنوان parent  سایر process  ها با PID=1  فعالیت خواهد کرد. systemd برای رفع برخی نواقص init  طراحی و پیاده سازی شده است به عنوان نمونه شروع process  ها به صورت همزمان و موازی در زمان بوت شدن سیستم که علاوه بر کاهش زمان بوت شدن سیستم عامل, استفاده از منابع پردازشی را نیز کاهش می دهد.

به عنوان نمونه init  به صورت سریالی عمل میکند. به این معنی که یک وظیفه تنها در زمانی شروع میشود که وظیفه قبلی با موفقیت انجام شده و در Memory نیز load  شده باشد که در زمان بوت شدن سیستم عامل باعث افزایش زمان بوت شدن می گردید. لازم به ذکراست که systemd  با هدف افزایش سرعت بوت شدن ایجاد نشده است اما برای این که کارها به صورت منظم انجام شود, نیاز بود تا هر گونه delay یا تاخیر غیر ضروری حذف گردد. که اجرای موازی process  ها و رعایت dependency  از مواردی بود که به کاهش این تاخیر ها کمک کردند.

نمونه ای از رعایت dependency این است که به صورت مثال سرویس هایی که در ابتدای شروع به پردازش نیاز به running  بودن سرویس network دارند میتوانند پس از شروع به کار سرویس network  به صورت همزمان و موازی شروع به کار نمایند. که این کار در init  همانطور که گفته شد به صورت سریالی انجام می پذیرد.

 

ویژگی های systemd

برخی از ویژگی هامانند کارآمی بیشتر نسبت به init  و یا ساده تر شدن پروسه بوت و بهبود API  و… باعث شد تا systemd  محبوبیت بیشتری پیدا کند و رفته رفته جای خود را در توزیع های مختلف باز بکند. در زیر شرح کامل ویژگی های systemd  آورده شده است.

  1. طراحی بهتر و کارآمد
  2. ساده شدن پروسه بوت شدن
  3. اجرای پروسس ها به صورت همزمان و موازی در هنگام بوت
  4. بهتر شدن API
  5. امکان حذف Component های اختیاری
  6. راه اندازی سرویس ها بر اساس تنظیمات نوشته شده در فایل کانفیگ (راه اندازی سرویس ها در init  به وسیله سلسله دستوراتی از طریق شل اسکریپت انجام میگیرد.)
  7. زمان بندی کارها
  8. لاگ ها توسط  journald ذخیره سازی می شوند.
  9. امکان انتخاب systemd برای ثبت وقایع سیستمی همانند sysog
  10. ذخیره سازی لاگ ها به صورت باینری
  11. کنترل ورود و خروج کاربران به وسیله systemd-logind

نطقه ضعف systemd عدم تطابق با  POSIX است.

systemd  در برخی از توزیع های لینوکس:

 

نام توزیع وضعیت استفاده 
Fedora از سال ۲۰۱۱ (اولین توزیعی که از systemd به صورت پیش فرض استفاده نمود)
Arch از سال ۲۰۱۲
RedHat از سال ۲۰۱۴ و نسخه ۷
CentOS از سال ۲۰۱۴ و نسخه ۷
Debian از سال ۲۰۱۵ و نسخه ۸ (Jessie)
Gentoo به صورت پیش فرض استفاده نمی شود و  نیاز به دانلود, نصب و پیکربندی دارد.
OpenSUSE از سال ۲۰۱۴ و نسخه ۱۲
Slack در حال حاضر خیر
Ubuntu از سال آپریل سال ۲۰۱۵ و نسخه ۱۵.۰۴
مقایسه systemd و init
Features init systemd
DBus Dependency – Mandatory No Yes
Device based Activation No Yes
Device dependency configuration with udev No Yes
Timer based Activation Cron/at Proprietary
Quota Management No Yes
Automatic Service Dependency Handling No Yes
Kills users Process at logout No Yes
Swap Management No Yes
SELinux integration No Yes
Support for Encrypted HDD No Yes
Static kernle module loading No Yes
GUI No Yes
List all the child processes No Yes
Sysv compatible Yes Yes
Interactive booting No Yes
Portable to non x86 Yes No
Adopted on Several Distro Several Distro
Parallel service startup No Yes
Resource limit per service No Yes
Easy extensible startup script Yes No
Separate Code and Configuration File Yes No
Automatic dependency calculation No Yes
Verbose debug Yes No
Version N/A V44+
Size 560 KB N/A
Number of Files 75 files 900 files + glib + DBus
Lines of code – LOC 15000 (Approx) 224000 (Approx) (inc Codes, comments and white space) 125000 (Approx) (acctual code)

Systemd برای فعالیت از مجموعه ای از پکیج ها استفاده می کند برخی از این پکیج ها و وظایف آنها به شرح زیر است.

journald

daemon است که وظیفه جمع آوری لاگ اتفاقات سیستمی و ذخیره سازی آنها به صورت باینری را بر عهده دارد. البته ادمین سیستم این امکان را دارد که مشخص کند لاگ ها توسط این daemon انجام شود یا توسط syslog-ng یا rsyslog

logind

وظیفه مدیریت ورود و  خروج واتصالات کاربران را بر عهده دارد و امکان multi session  را برای کاربران را فراهم می آورد و در واقع جایگزینی است برای Consolekit که توسعه آن متوقف شده است.

networkd

وظیفه handle  کردن پیکربندی کارت های شبکه را بر عهده دارد.در اوایل این daemon  تنها می توانست به صورت استاتیک به کارت های شبکه IP دهد و برخی از پیکربندی های اولیه ‌Bridging  را انجام دهد که از سال ۲۰۱۴ امکان DHCP سرور برای IPv4 و پشتیبانی از VXLAN به آن اضافه شده است.

tmpfiles

ابزاری است که وظیفه ایجاد و حذف فایل ها و دایرکتوری های موقت (Temp) را بر عهده دارد و به صورت معمول در شروع به کار سیستم عامل فعال شده و در بازه های مشخص شده نیز عمل می کند.

timedated

وظیفه کنترل تنظیمات مربوط به زمان را بر عهده دارد. تنظیماتی مانند زمان سیستم, time zone و انتخاب زمان به UTC و زمان محلی (Local Time Zone) را بر عهده این daemon  است.

udevd

udev  نقش یک device manager  را برای کرنل ایفا میکند و وظیفه آن handle کردن دایرکتوری /dev و تمام فعالیت های مرتبط با user space  را در هنگام حذف یا اضافه device  جدید را بر عهده دارد.

libudev

یک استاندارد library برای استفاده از udev است که به برنامه های third-party اجازه میدهد تا منابع udev را query  کنند.

Systemd-boot

boot Manager است که در systemd تعبیه شده است که سابقا با نام gummiboot شناخته می شده است.

تفاوت init و Systemd در یک نگاه

systemd-vs-sysVinit-cheatsheet

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

ایجاد سرویس در centos با Systemd

امیدوام این مقاله برای عزیزان مفید واقع شده باشد.

حامد
اشتراک دانش رو دوست دارم برای همین سعی میکنم مطالب آموزشی ای تهیه شده دارای جزئیات خوب و به صورت کامل تهیه بشوند.استفاده از مطالب این سایت در هر جایی بلا مانع می باشد. اما ذکر منبع رفتاری حرفه ای و اخلاقی خواهد بود. من را از نظرات خود مطلع سازید. و اگر میخواهید در مورد من بیشتر بدانید سری به صفحه "در باره من" بزنید.