تفاوت بین Systemd SysVinit Upstart

init چیست؟

در سیستم های مبتنی بر Unix یا Unix ء، init اولین فرآیندی است که در هنگام boot شدن سیستم شروع می شود. این process اصلی تمام فرآیندهایی است که در سیستم در حال اجرا هستند. به طور خودکار تمام process هایی را که orphan می شوند، اتخاذ می کند. init شناسه process ء 1 را نگه می دارد. پس از شروع به کار آن تا زمانی که سیستم خاموش شود به کار خود ادامه می دهد.

 

SystemV (SysV) جیست؟

Unix System V اغلب به اختصار SysV خوانده می شود. این یکی از اولین operating system های تجاری Unix بود که توسط AT&T توسعه یافت که در سال 1983 منتشر شد. سبک جدیدی از کانفیگ راه اندازی سیستم در Unix system v استفاده شد و به همین دلیل SysVinit نامیده شد. بعدها در distribution های مختلف Linux استفاده شد.

Sysvinit یک system init سنتی برای Unix/Linux است که هدف اصلی آن راه‌اندازی، مدیریت و ردیابی سرویس‌ها و daemon های system است. در طول سال ها چندین جایگزین از system init سنتی برای مقابله با محدودیت های طراحی منتشر شده است.

این فرآیند شش system state را تعریف می‌کند که به عنوان run-level شناخته می‌شوند و تمام process ها و service ها را با این run-level ها ترسیم می‌کند. همچنین دستورات و روش‌های آسان برای مدیریت run-level ها و service های مرتبط با آن‌ها را ارائه می‌دهد.

این برنامه تمام service ها را در یک pre-defined sequence شروع می کند. script بعدی در sequence را فقط در صورتی اجرا می کند که script فعلی در sequence اجرا شود یا time out شده باشد. اگر یک script در حین اجرا گیر می کرد، باید منتظر می ماند تا زمان آن script تمام شود. این انتظار غیرمنتظره باعث می شود کل initialization process سیستم با کارآمدی کمتر و در نهایت کندتر شود.

Runlevels

runlevel وضعیتی از init process است که می تواند توسط سیستم برای تعیین اینکه در چه حالتی باید کار کند استفاده شود. هر runlevel دارای تعداد معینی سرویس stopped یا started است، این سطوح با اعداد مشخص می شوند. به طور کلی، هفت runlevel وجود دارد که از 0 تا 6 شماره گذاری شده اند.

هنگامی که Linux kernel ء boot می شود، برنامه init فایل etc/inittab/ را می خواند تا رفتار هر runlevel را مشخص کند. بسیاری از Linux distribution ها به‌ طور پیش‌فرض در runlevel ء 3 یا 5 راه‌اندازی می‌شوند. این‌ها runlevel های استانداردی هستند که در این مقاله مورد بحث قرار گرفته‌اند، می‌توان runlevel جدیدی ایجاد کرد یا runlevel موجود را می‌توان توسط کاربر بر اساس نیاز تغییر داد.

Upstart چیست؟

Upstart به عنوان جایگزینی برای مدل SysVinit ایجاد شد. بر خلاف SysVinit که برای کار در یک محیط استاتیک ساخته شده بود، Upstart برای کار در یک محیط انعطاف پذیر ایجاد شد.

Upstart سه مزیت عمده نسبت به SysVinit دارد. این مزایا عبارتند از event-based service management، asynchronous services startup و automatic restart سرویس‌های crash شده.

Upstart به جای استفاده از run-level ها، از system event ها برای start و stop سرویس استفاده می کند. یک event  تغییر در system state است. هنگامی که یک event رخ می دهد، upstart آن event را شناسایی کرده و تغییرات لازم را ایجاد می کند.

یک event می تواند هر چیزی باشد که نیاز به تغییر در system state داشته باشد یا باعث آن شود. در ادامه به چند نمونه از event ها اشاره می شود.

  • A hot-plug device (such as USB drive) is plugged-in or removed from the system.
  • The system boots up.
  • A service is started or stopped.

Upstart به عنوان جایگزینی برای SysVinit توسعه داده شد، نه به عنوان یک برنامه system initializer مدرن. Upstart به طور کامل تمام کاستی های SysVinit را برطرف کرد، اما feature های جدید را از دست داد. تا زمانی که یک برنامه initializer مدرن توسعه داده نشده بود، برای غلبه بر محدودیت های SysVinit، Upstart به عنوان یک راه حل موقت توسط بسیاری از توسعه دهندگان Linux استفاده می شد.

Systemd چیست؟

systemd یک init system جدیدتر است. این شامل ویژگی های مختلفی مانند on-demand starting daemons، پشتیبانی از snapshot، ء process tracking، و inhibitor locks و غیره است. این سیستم جایگزین سیستم سنتی Unix system v و BSD init system شده است و امروزه systemd توسط اکثر Linux distributions پذیرفته شده است. systemd با script های init SysV و LSB سازگار است.

kernel بلافاصله پس از boot شدن initialization process را شروع می کند. از آنجایی که Linux kernel از process ID 0 برای ارجاع به خود استفاده می کند، process ID 1 را به initialization process اختصاص می دهد.

پس از شروع، initialization process کنترل بالا آوردن سیستم را برعهده می گیرد. فایل کانفیگ را می خواند و بر اساس وضعیت کانفیگ شده در فایل کانفیگ، تمام service ها و process های دیگر را شروع می کند. به زبان آسان می توان گفت که initialization process مادر همه process ها است.

برای اشاره به initialization process،ء SysVinit و Upstart از term init استفاده می کنند در حالی که systemd از term systemd استفاده می کند. SysVinit، Upstart و Systemd ء  initialization process را به طور متفاوت هندل می کنند.

بر خلاف predecessor ها، systemd به راحتی قابل درک نیست. برای برآوردن نیازهای سیستم مدرن، دارای چندین feature و tool است. این feature ها و tool ها به شما امکان می‌دهند service ها، device ها، socket ها، mount point ها، swap area، ء unit type ها، target ها و بسیاری موارد دیگر را مدیریت کنید.

ویژگی های Systemd

  • It starts services in parallel mode.
  • It automatically resolves dependencies.
  • It can repawn processes.
  • It can track and relate processes together by using Linux control groups.
  • It has been created to operate in the flexible modern environment. It means, it supports all types of modern hardware such as hot-plug devices and large data storages.
  • It can start daemons on-demand without restarting the running service.
  • It can create span-shot of the running system state.
  • It can log events.

systemctl چیست؟

systemctl ابزاری است که مسئول کنترل یک init system adopted و سیستم مدیریت systemd است.

برخی از دستورات متداول آن به شرح زیر می باشد.

sudo systemctl start service-name -To start a service
sudo systemctl stop service-name -Use to stop a systemd service
sudo systemctl enable service-name -enable the service at boot,apache2 will start its services once the system boot completed.
sudo systemctl disable service-name– disable the service at boot
sudo systemctl restart service-name– this command will restart the apache2 services
sudo systemctl status service-name– Will display the status of individual service
systemctl is-enabled service-name – check if a service is configured to start on boot or not

hostnamectl – Use to control the hostname, there are various options that are available to use with this command
for example-
hostnamectl set-hostname --pretty new_hostname
teamdctl – The team daemon control tool, allows a user to interact with a running teamd instance.
timedatectl – Control the system time and date, It may be used to query and change the system clock and its settings
journalctl– Query the systemd journal
systemd-analyze or systemd-analyze time–  Check the system boot time
systemd-analyze blame– Check each service time consumption at startup
systemctl kill service-name– Kill all the processes associated with the given service
systemctl – List all running services
systemctl status – Shows system status

Systemd Traget

systemd target ها مفهومی مشابه runlevel ها هستند و همچنین اهداف مشابهی را دنبال می‌کنند. اما کمی متفاوت عمل می کند. هر target به جای اعدادی که برای خدمت به یک هدف خاص در نظر گرفته شده است نامگذاری می شود. اهداف systemd توسط target units که با پسوند فایل target. ختم می شوند نشان داده می شوند.

0 دیدگاه در “تفاوت بین Systemd SysVinit Upstartافزودن → خودتان

دیدگاهتان را بنویسید

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