مقایسه service و systemctl در لینوکس

مدیریت سرویس یک جنبه حیاتی مدیریت سیستم در لینوکس است. systemctl و service دو دستوری هستند که برای مدیریت سرویس‌ها در لینوکس استفاده می‌شوند.. در این مطلب به بررسی تفاوت‌های این دو دستور، عملکرد، سینتکس و سازگاری آنها می‌پردازیم.


systemctl بخشی از سیستم systemd init است و ویژگی‌های پیشرفته و سازگاری بهتر با systemd را ارائه می‌دهد. service یک اسکریپت wrapper است که با سیستم‌های init مختلف کار می‌کند و رابط ساده‌تری ارائه می‌دهد. انتخاب بین آنها بستگی به الزامات خاص و سیستم اولیه مورد استفاده در سیستم دارد.

Systemctl چیست؟

systemctl یک دستور سرشار از ویژگی است که می‌تواند start، stop، restart، reload، enable، disable و بررسی status سرویس‌ها را انجام دهد. از فعال سازی بر اساس تقاضا(on-demand)، بارگذاری موازی سرویس‌ها در هنگام راه اندازی و مدیریت سرویس‌های مبتنی بر وابستگی(dependency-based) پشتیبانی می‌کند.

به عنوان مثال، برای راه اندازی یک سرویس با استفاده از systemctl، باید از دستور زیر استفاده کنید:

systemctl start service_name

در این دستور start عملی است که باید انجام شود و service_name نام سرویس است.

 

Service چیست؟

دستور service، اگرچه ساده‌تر است، اما همچنان به مدیران سیستم اجازه می‌دهد تا سرویس‌ها را مدیریت کنند. می‌تواند start، stop، restart، reload و بررسی status سرویس‌ها باشد.

برای راه اندازی یک سرویس با استفاده از سرویس، از دستور زیر استفاده کنید:


service service_name start

در این دستور start عملی است که باید انجام شود و service_name نام سرویس است.

 

مقایسه systemctl با service

بررسی مدیریت سرویس‌ها

Systemctl
systemctl سرویس‌های سازگار با سیستم systemd init را مدیریت می‌کند. با واحدهایی کار می‌کند که شامل سرویس‌ها، سوکت‌ها، تارگت‌ها و موارد دیگر می‌شود. می‌تواند سرویس‌ها را در زمان بوت فعال یا غیرفعال کند و کنترل بیشتری بر مدیریت سرویس ارائه دهد.

service
دستور service بسته به پیکربندی سیستم می‌تواند با سیستم‌های init مختلف کار کند و می‌تواند سرویس‌ها را با استفاده از Upstart، اسکریپت‌های V init و خود systemd مدیریت کند.

 

بررسی قواعد نوشتاری (سینتکس)

سینتکس استفاده از دستورات systemctl و service متفاوت است. دستورات systemctl به طور معمول به شکل systemctl action service_name استفاده می‌شوند و دستور service از الگوی service service_name action پیروی می‌کند.

سازگاری با توزیع‌های مختلف

Systemctl
systemctl دستور توصیه شده برای مدیریت سرویس‌ها در سیستم‌هایی است که از systemd به عنوان سیستم init استفاده می‌کنند. سازگاری و پشتیبانی بهتری را برای ویژگی‌های systemd فراهم می‌کند.

service
دستور  servce قابل حمل‌تر است و می‌تواند در نسخه‌های مختلف اوبونتو و سایر توزیع‌های لینوکس که ممکن است از سیستم‌های init مختلف استفاده کنند، استفاده شود.


به طور خلاصه، systemctl ویژگی‌های پیشرفته‌تر و سازگاری بهتر با systemd را ارائه می‌کند، در حالی که دستور service رابط ساده‌تر و سازگاری گسترده‌تری را در سیستم‌های مختلف init ارائه می‌دهد. انتخاب بین آنها بستگی به الزامات خاص و سیستم اولیه مورد استفاده در سیستم دارد. درک این تفاوت ها به شما امکان می دهد سرویس‌های لینوکس خود را به طور موثرتری مدیریت کنید.

مقایسه  systemd و init

 

مقایسه  systemd و init برای مبتدیان لینوکس

مقایسه بین systemd و init یک موضوع جدی است که باعث جنجال در کاربران قدیمی لینوکس می‌شود.حتی در هنگام خواندن این مطلب هم ممکن است بسیاری از کاربران لینوکس آزرده خاطر شوند یا نظر دیگری داشته باشند که پیشنهاد می‌کنم از بخش نظرات، دیدگاه خود را با ما به اشتراک بگذارید.

(System V) Init چیست؟

Init مخفف initialization اولین (و والد) فرآیندی است که توسط کرنل لود می‌شود و سایر فرآیندهای (فرزند) را برای کارکرد سیستم به روشی سیستماتیک در بر می‌گیرد و PID=1 به آن اختصاص داده می‌شود (شناسه‌های فرآیند به طور متوالی تخصیص داده می‌شوند). به عنوان والد همه فرآیندها، باید به طور مداوم تا زمانی که سیگنال halt توسط کاربر صادر شود، کار کند. 

گزینه‌های جایگزین init قبل از SystemD 

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

  • Runit  یک سیستم init سبک وزن که از فایل‌های پیکربندی واقع در "/etc/runit/*" برای مدیریت سرویس‌های سیستم استفاده می‌کند.
  • Sysmaster  یکی دیگر از سیستم‌های init سبک وزن که توابع basic initialization را برای سیستم لینوکس فراهم می‌کند.
  • OpenRC  جایگزین مستقیم سیستم init نیست، بلکه یک افزونه است که پردازش موازی را در هنگام بوت شدن سیستم امکان پذیر می‌کند. قابلیت‌های سیستم init موجود را افزایش می‌دهد.
  • Initng یک دیمن جایگزین init که راه اندازی فرآیند موازی را پس از برآورده شدن وابستگی‌های آنها تسهیل می‌کند. در طول مراحل بتا، این سیستم به عنوان سیستم پیشفرض توسط چندین سیستم مانند Pingwinek، Enlisy، Berry Linux و Bee پذیرفته شد.
  • Upstart  یک دیمن جایگزین init که توسط Canonical توسعه یافته است که برای پشتیبانی از پردازش موازی در هنگام بوت شدن سیستم طراحی شده است.
  • Epoch  یک سیستم init تک رشته‌ای که عمدا به گونه‌ای طراحی شده است که حداقلی و غیر نفوذی باشد.
  • SystemD  یک دیمن جایگزین init که به خاطر قابلیت‌های موازی سازی قدرتمندش شناخته می‌شود. به جای استفاده از اسکریپت‌های shell همانطور که در سیستم‌های init سنتی دیده می‌‎شود، سرویس‌ها را بر اساس فایل های پیکربندی راه اندازی می‌کند.
خرید سرور مجازی لینوکس یک ماشین مجازی کامل است که امکان دسترسی SSH طبق آموزش را به آن خواهید داشت.
خرید سرور مجازی لینوکس در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.

SystemD چیست؟

SystemD یک مدیر سیستم و سرویس برای سیستم عامل‌های لینوکس است. یکی از اجزای مهم اکثر توزیع‌های مدرن لینوکس، از جمله توزیع‌های محبوب مانند اوبونتو، فدورا، CentOS و Debian است. SystemD به عنوان یک سیستم init عمل می‌کند، به این معنی که مسئول اولیه سازی فضای کاربر و مدیریت سرویس‌های سیستم در طول فرآیند بوت است.
قابل توجه ترین ویژگی systemd قابلیت موازی سازی و منطق کنترل سرویس مبتنی بر وابستگی بود که به سیستم اجازه می‌داد چندین فرآیند را به صورت موازی شروع کند و به طور غیرمستقیم زمان بوت را بهبود بخشد.
Systemd اغلب به‌عنوان یک دیمن اشتباه درک می‌شود، اما در واقع یک مجموعه نرم‌افزاری برای لینوکس است. systemctl، یک ابزار خط فرمان برای مدیریت سرویس‌های سیستم، که اغلب به عنوان daemons یا systemd units شناخته می‌شود، ارائه می‌کند تا به شما در انجام وظایف متداول مدیر سیستم کمک کند.

چرا Init جایگزین شد؟

در حالی که این دیمن عالی بود، اشکال اصلی آن عدم پشتیبانی از فرآیندهای موازی در هنگام بوت شدن سیستم بود، زیرا هرگز با هدف افزایش سرعت بوت طراحی نشده بود.
یکی دیگر از عوامل جایگزینی init، عدم عملکرد آن بود. برخلاف فایل‌های پیکربندی systemd، برای مدیریت عملکردهای حیاتی سیستم تحت کنترل superscript به اسکریپت‌های shell متکی بود.

این رویکرد جنبه مثبتی داشت فایل‌های متنی قابل ویرایش (برای کاربران root)، شفافیت اعمال اسکریپت را ارائه می‌کرد و از روش ثبت متن استاندارد (syslog) پشتیبانی می‌کرد.
با گذشت زمان، با مدرن‌تر شدن سیستم، اندازه و پیچیدگی اسکریپت افزایش یافت و درک آن را سخت‌تر کرد،  همچنین Init روش مستقیمی برای نمایش وابستگی‌ها نداشت.

SystemD چه چیزی برای ارائه دارد؟

در سال 2010، SystemD موازی سازی پیشگامانه را در هنگام بوت شدن سیستم و مدیریت متمرکز برای فرآیندها، دیمن‌ها، سرویس‌ها و نقاط نصب (mount points) معرفی نموده  و آن را به عنوان تنها مجموعه کاربردی با چنین قابلیت‌هایی متمایز کرد. SystemD همچنین مفهوم واحدهایی را برای مدیریت سرویس‌های مختلف در سیستم شما معرفی می‌کند، مانند service unit ، mount unit ، socket unit ، slice unit و غیره، که در آن واحدها به عنوان فایل‌های پیکربندی نامیده می‌شوند. در ادامه لیستی از ویژگی های قابل توجه SystemD آمده است:

  • راه اندازی (boot-up) ساده، سریع و کارآمد
  • Mount handling 
  • عملکرد اسنپ شات
  • کنترل سرویس‌های در حال اجرا
  • ثبت رویداد با Journald
  • ریستارت خودکار سرویس های خراب (crashed services)
  • Mount و  automount pointsبرای تعمیر نگهداری
  • ردیابی فرآیند از طریق گروه‌های کنترل لینوکس
  • سوکت و دسترسی همزمان D-Bus برای راه اندازی سریعتر سرویس‌ها
  • کنترل پویای سرویس‌ها(یا دیمن‌ها) بر اساس تغییرات سخت افزاری
  • زمان بندی کار با تایمرهای تقویم که توسط سیستم کنترل می شود
  • مدیریت ورود کاربران با systemd-login
  • فعال سازی سرویس بر اساس تقاضا (On-demand) برای بهبود بهینه سازی باتری

توزیع لینوکس با SystemD 

در ادامه لیست زمانی از توزیع‌های لینوکس مجهز به SystemD وجود دارد که بر اساس تاریخ انتشار پیش‌فرض مرتب شده‌اند.

 

  • Fedora Linux ( 2011)
  • Mageia ( 2012)
  • openSUSE ( 2012)
  • Arch Linux ( 2012)
  • CoreOS ( 2013)
  • Manjaro Linux ( 2013)
  • Red Hat ( 2014)
  • CentOS ( 2014)
  • Debian ( 2014)
  • Ubuntu ( 2015)
  • Clear Linux ( 2017)
  • Linux Mint ( 2018)


چرا این جایگزینی اینقدر بحث برانگیز شد؟

عوامل متعددی در ماهیت بحث برانگیزی این موضوع نقش دارند. برای شفافیت، این دلایل را به صورت خلاصه بیان می کنم و به دنبال آن:

  • SystemD که اغلب به عنوان یک دیمن کنترل کننده برای کل توزیع توصیف می‌شود، همه چیز را تحت یک فرآیند والد قرار می‌دهد. شکست می‌تواند منجر به خسارت فاجعه بار شود.
  • همچنین به دلیل پیچیده بودن، یکپارچه بودن و انحراف از فلسفه یونیکس « do one thing and do it well » مورد انتقاد قرار گرفت.
  • پیچیدگی سیستم به دلیل سیستم‌های متورم و نیازهای تعمیر و نگهداری به طور قابل توجهی افزایش می‌یابد.
  • تنها پس از یک سال، Lennart Poettering، توسعه دهنده systemd، به مایکروسافت پیوست.
  • ابزار خط فرمان مدیریت systemd از نظر طول بسیار گسترده است.


مقایسه  SystemD و Init

این بخش در درجه اول برای تازه واردان به لینوکس است. اگر از زمان شروع لینوکس با آن همراه نبوده‌اید، این جنگ یا بحث ممکن است به شما مربوط نباشد.
همانطور که ممکن است از قبل ندانسته از systemd استفاده می‌کنید، این موضوع در درجه اول باعث می‌شود کاربران با تجربه لینوکس یا افرادی که ارزش بالایی برای اصول متن‌باز، سیستم‌های ناب (lean) و جوهره فلسفه لینوکس قائل هستند. پس پیشنهاد می‌کنیم از هرگونه سوگیری یا قضاوت بین این دو سیستم اجتناب کنید، زیرا هر دو دارای شایستگی‌های خود بوده و در حوزه‌های مربوطه عالی هستند.