پردازش‌های پس‌زمینه یا سرویس در هر سیستم عاملی ممکن است از نظر میزان مصرف پردازنده سبک باشد و مشکلی ایجاد نکند اما به هر حال مقداری از حافظه‌ی RAM را اشغال می‌کند و مدت زمان بوت شدن سیستم عامل را افزایش می‌دهد.

در برخی توزیعات سیستم عامل Linux پردازش‌های پس‌زمینه بسیار کم‌تعداد است و هر موردی که ضروری نبوده، غیرفعال شده است. حتی ممکن است سرویس‌هایی مثل پرینت یا به اشتراک‌گذاری فایل در شبکه هم غیرفعال شده باشد. در برخی دیگر نیز پردازش‌های پس‌زمینه‌ی متعددی فعال است و زمان بوت بیشتر است.

در این مقاله به روش مدیریت کردن پردازش‌هایی که بوت شدن لینوکس را تحت تأثیر قرار می‌دهند پرداخته و دستوراتی برای تحلیل و بررسی این موارد ارایه می‌کنیم. با ما باشید.

خوشبختانه در سیستم عامل متن باز لینوکس، دست کاربران حرفه‌ای برای مدیریت کردن همه چیز باز است و اپلیکیشن‌های زیادی نیز برای ساده کردن مدیریت توسط کاربران معمولی وجود دارد. در این مقاله می‌خواهیم با روش غیرفعال کردن سرویس‌ها یا به زبان دیگر، پردازش‌های پس‌زمینه در لینوکس آشنا شویم. غیرفعال کردن سرویس‌ها به این معنی است که در صورت نیاز می‌توان سرویسی را مجدداً فعال کرد و از آن استفاده کرد در حالی که اگر سرویسی کاملاً حذف شود، اضافه کردن آن پیچیده‌تر است.

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

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

توجه داشته باشید که برخی سرویس‌ها به موازات سرویس‌های دیگر اجرا می‌شوند و لذا حتی اگر زمان اجرا ۲ ثانیه باشد، باز هم نمی‌توان گفت که سرویس موردبحث موجب کند شدن فرآیند Boot سیستم عامل شده است و باید غیرفعال شود.

برای استفاده از قابلیتی که اشاره کردیم، اپلیکیشن ترمینال لینوکس را اجرا کنید و دستور زیر را وارد کرده و کلید Enter را فشار دهید تا اجرا شود:

همان‌طور که مشاهده می‌کنید مدت زمان بارگذاری هسته‌ی لینوکس یا به عبارت دیگر Kernel لینوکس و همین‌طور سرویس‌های پایه‌ای سیستم عامل لینوکس ذکر می‌شود اما مدت زمانی که برای لود شدن رابط کاربری گرافیکی یا به اختصار GUI، لحاظ نمی‌شود.

به بیان دیگر با اجرای دستور اشاره شده، فاصله‌ی زمانی بین بارگذاری هسته سیستم عامل تا لحظه‌ای که به کنسول دسترسی پیدا می‌کنید، اندازه‌گیری می‌شود.

همان‌طور که در تصویر فوق مشاهده می‌کنید، در صورت موجود نبودن رابط کاربری گرافیکی، صفحه‌ی خوشامدگویی زیبا و گرافیکی در کار نخواهد بود و می‌بایست در کنسول Login یا ورود به حساب کاربری را انجام بدهید.

برای اندازه‌گیری مدت زمان لازم جهت آغاز به کار رابط کاربری گرافیکی، دستور زیر را در ترمینال اجرا کنید:

نتیجه را در تصویر زیر مشاهده می‌کنید:

با توجه به تصویر فوق مجموعاً 2.126 ثانیه زمان برای بارگذاری رابط کاربری گرافیکی صرف شده است. این زمان بدون در نظر گرفتن زمان لازم جهت بارگذاری ابزارهای دستاپ لینوکس است! برای فعال و غیرفعال کردن این ابزارها، می‌توانید از اپلیکیشن مدیریت استارت‌آپ محیط دستاپی نصب شده استفاده کنید.

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

نتیجه را در تصویر زیر مشاهده می‌کنید:

لیستی از سرویس‌ها به همراه مدت زمان بارگذاری هر سرویس در ترمینال نمایان می‌شود. می‌توانید با کلیدهای فلش بالا و فلش پایین یا با کلیدهای Page Up و Page Down لیست را بررسی کنید. برای خروج نیز کافی است q را فشار دهید.

استفاده از systemctl برای غیرفعال کردن سرویس‌های اضافه در لینوکس

برای افزایش سرعت بوت شدن لینوکس، همان‌طور که اشاره کردیم باید پردازش‌های پس‌زمینه که اصطلاحاً سرویس گفته می‌شود را غیرفعال کرد اما نه موارد ضروری و پرکاربرد را. با استفاده از دستور قبلی، لیست سرویس‌ها و زمان بارگذاری مشخص شده است و به عنوان مثال سرویسی به اسم snapd حدود ۱.۳ ثانیه زمان برای اجرا نیاز دارد. البته این عدد به سیستمی سریع مجهز به درایو حالت جامد یا SSD مربوط می‌شود. اگر به جای SSD از هارددیسک استفاده شود، طبعاً مدت زمان اجرای snapd بیشتر می‌شود و ممکن است به بیش از ۵ ثانیه برسد.

در ضمن در نظر بگیرید که در صورت استفاده از SSD، پردازش‌های پس‌زمینه می‌توانند به صورت موازی با سرعت بالایی بارگذاری شوند در حالی که در مورد هارددیسک، بارگذاری موازی داده مشکل‌تر است و شاید اغلب سرویس‌ها به صورت سریال یا یکی پس از دیگری اجرا شوند.

اما به مسأله‌ی اصلی بپردازیم که غیرفعال کردن سرویس‌های بی‌استفاده یا کم‌کاربرد است:

برای غیرفعال کردن سرویسی به اسم snapd که نام کامل آن طبق تصویر قبلی، snapd.service بوده، دستور زیر را اجرا کنید:

اما اگر سیستم عامل را ریبوت کنید، متوجه می‌شوید که مجدداً snapd که یک دائمون یا به بیان دیگر، سرویسی برای اجرای امور دیگر است، به صورت خودکار اجرا شده است! علت این است که برخی سرویس‌های دیگر برای اجرا و کارکرد صحیح، به snapd نیاز داشته‌اند و لذا آن را اجرا کرده‌اند.

برای مشاهده کردن سرویس‌های مرتبط، دستور زیر را اجرا کنید که در حقیقت با استفاده از فرمان grep در نتایج به دنبال کلمه‌ی snap جستجو می‌کند:

همان‌طور که در تصویر زیر مشاهده می‌کنید، سرویس‌های snapd.socket و snapd.seeded.service در نتایج موجود بوده و به نظر می‌رسد که یکی از این موارد سرویس موردبحث را اجرا کرده است.

بنابراین باید با سعی و خطا، تک‌تک سرویس‌هایی که احتمال می‌دهید سرویس غیرفعال شده را اجرا کرده باشند، غیرفعال کنید و مجدداً بررسی کنید که آیا سرویس موردنظر باز هم پس از بوت شدن سیستم عامل اجرا می‌شود یا خیر. لذا ابتدا snapd.socket را غیرفعال کنید و در صورت حل نشدن مشکل، مورد بعدی را غیرفعال کنید.

استفاده از systemctl برای ماسک کردن سرویس‌ها

با استفاده از دستور زیر می‌توانید فایل مربوطه به سرویسی به اسم snapd.service را نال کنید. به این کار ماسک کردن گفته می‌شود و راه اجرای خودکار سرویس را مسدود می‌کند.

در مورد سرویس‌هایی که سرویس وابسته دارند مثل موردی که مثال زدیم، می‌‌توانید سرویس‌های وابسته را هم ماسک کنید.

و اما نتیجه چقدر کاهش زمان بوت بوده است؟

زمان بوت از حدود 4 ثانیه به 3.45 ثانیه کاهش پیدا کرده است و این معادل ۱۵ درصد افزایش سرعت بوت است.

در سیستم عامل‌های سنگین‌تر که به خصوص از هارددیسک بوت می‌شوند، زمان بوت به مراتب بیشتر است و با تغییرات ذکر شده و غیرفعال کردن یک سرویس خاص، ممکن است مدت زمان بوت چند ثانیه کمتر شود! این کاهش زمان در مقوله‌ی هاست و سرور بسیار مهم است چرا که نباید سایت‌ها مدت زیادی از دسترس خارج شوند.

در نهایت توصیه می‌کنیم که برای مدیریت کردن سرویس‌ها به صورت گرافیکی، از اپلیکیشنی به اسم Systemd Manager استفاده کنید که البته محدودتر از روش استفاده از ترمینال و دستورات ذکر شده است اما به هر حال ساده و گرافیکی است.