</>

لینوکس‌پارسی

مرجع فارسی آموزش لینوکس

Gentoo • Arch • Debian • Ubuntu • Kali • Parrot
پرش به محتوای اصلی

Command Palette

Search for a command to run...

Systemd — سیستم init مدرن در Gentoo

آموزش کامل systemd در Gentoo: تغییر پروفایل، دستورهای systemctl و journalctl، unitهای کلیدی، targetها و تحلیل زمان بوت با systemd-analyze.

متوسط۹ دقیقه مطالعهآخرین بروزرسانی: ۱ تیر ۱۴۰۵ویرایش در گیت‌هاب

systemd سیستم init مدرن و استاندارد اکثر توزیع‌های لینوکس است که در Gentoo به‌صورت اختیاری پشتیبانی می‌شود. اگرچه پیش‌فرض Gentoo OpenRC است، بسیاری از کاربران به دلایلی مانند سازگاری بهتر با دسکتاپ‌های مدرن (GNOME)، ابزارهای ابری و محیط‌های container، systemd را انتخاب می‌کنند.

systemd چیست؟#

systemd یک «مجموعهٔ نرم‌افزاری» است که شامل init سیستم، logger، network manager، login manager، جایگزین cron و بسیاری ابزار دیگر است. این یکپارچگی مزایایی دارد (هماهنگی میان اجزا، API یکپارچه) اما معایبی هم دارد (حجیم بودن، وابستگی متقابل بالا، عدم رعایت فلسفهٔ UNIX).

ویژگیsystemdOpenRC
نوعیکپارچهماژولار
Logger داخلیبله (journald)خیر (syslog-ng)
مدیریت نشستبله (logind)خیر (elogind)
Network manager داخلیبله (networkd)خیر (netifrc)
بوت موازیبله (به‌صورت socket)بله (rc_parallel)
سرعت بوتسریعسریع
شفافیتکمتربیشتر

انتخاب پروفایل systemd در Gentoo#

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

# مشاهده پروفایل‌های موجود
eselect profile list
# خروجی:
#   [1]   default/linux/amd64/23.0
#   [2]   default/linux/amd64/23.0/desktop
#   [3]   default/linux/amd64/23.0/desktop/gnome
#   [4]   default/linux/amd64/23.0/desktop/systemd
#   [5]   default/linux/amd64/23.0/desktop/systemd/gnome
#   [6]   default/linux/amd64/23.0/no-multibyte/systemd
 
# انتخاب پروفایل systemd
eselect profile set 4
# یا برای GNOME با systemd
eselect profile set 5
 
# اعمال تغییرات (مهم!)
emerge --ask --changed-use --deep --newuse @world
# خروجی:
# [ebuild  N    ] sys-apps/systemd-255.4
# [ebuild  N    ] sys-apps/dbus-1.14.10
# [uninstall     ] sys-apps/openrc-0.52.1

تغییر از OpenRC به systemd

تغییر سیستم init فرایندی جدی است. همیشه پیش از تغییر از سیستم نسخهٔ پشتیبان بگیرید. پس از نصب systemd، باید پیکربندی شبکه و سرویس‌ها را به systemd منتقل کنید، در غیر این صورت سیستم بوت نخواهد شد.

پیکربندی اولیه پس از نصب systemd#

پس از نصب، باید چند کار را انجام دهید:

# فعال کردن NetworkManager (پیشنهادی برای دسکتاپ)
systemctl enable NetworkManager
 
# فعال کردن SSH
systemctl enable sshd
 
# فعال کردن timesyncd
systemctl enable systemd-timesyncd
systemctl start systemd-timesyncd
 
# تنظیم hostname
hostnamectl set-hostname gentoo-host
 
# تنظیم timezone
timedatectl set-timezone Asia/Tehran

فرمان‌های اصلی systemctl#

systemctl ابزار اصلی مدیریت سرویس‌ها در systemd است:

# شروع سرویس
systemctl start sshd
 
# توقف سرویس
systemctl stop sshd
 
# راه‌اندازی مجدد
systemctl restart sshd
 
# بارگذاری مجدد پیکربندی بدون قطع
systemctl reload sshd
 
# فعال‌سازی برای بوت
systemctl enable sshd
# خروجی:
# Created symlink /etc/systemd/system/multi-user.target.wants/sshd.service → /usr/lib/systemd/system/sshd.service.
 
# غیرفعال‌سازی
systemctl disable sshd
 
# وضعیت
systemctl status sshd
# خروجی:
# ● sshd.service - OpenSSH server daemon
#      Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; preset: enabled)
#      Active: active (running) since ... ago
#        Docs: man:sshd(8)
#              man:sshd_config(5)
#    Main PID: 1234 (sshd)
# ...
 
# لیست همه سرویس‌ها
systemctl list-units --type=service
# لیست سرویس‌های فعال
systemctl list-units --type=service --state=running
# لیست سرویس‌های نصب‌شده
systemctl list-unit-files --type=service

journalctl — مشاهده لاگ‌ها#

systemd از journald برای ثبت رخدادها استفاده می‌کند. این لاگ‌ها باینری هستند (نه متنی ساده) و با journalctl خوانده می‌شوند:

# همه لاگ‌ها از بوت فعلی
journalctl
 
# لاگ‌های یک سرویس خاص
journalctl -u sshd
 
# لاگ‌های ۱ ساعت گذشته
journalctl --since "1 hour ago"
 
# لاگ‌های امروز
journalctl --since today
 
# پیگیری زنده (مانند tail -f)
journalctl -f
 
# لاگ‌های بوت قبلی
journalctl --list-boots
# خروجی:
# -1 2026-06-21 09:23:11 ... 2026-06-21 22:11:45
#  0 2026-06-22 08:15:33 ... 
journalctl -b -1   # بوت قبلی
 
# فقط خطاهای سطح error و بالاتر
journalctl -p err

Unitهای کلیدی#

این جدول مهم‌ترین unitهایی است که در Gentoo با systemd معمولاً فعال می‌شوند:

Unitبستهکاربرد
sshd.servicenet-misc/opensshسرور SSH
NetworkManager.servicenet-misc/networkmanagerمدیریت شبکه (دسکتاپ)
systemd-networkd.serviceداخلیمدیریت شبکه (سرور)
systemd-timesyncd.serviceداخلیهمگام‌سازی زمان (NTP سبک)
systemd-resolved.serviceداخلیحل‌کننده DNS
systemd-logind.serviceداخلیمدیریت نشست
dbus.servicesys-apps/dbusپیام‌رسانی
cups.servicenet-print/cupsچاپگر
cronie.servicesys-process/cronieزمان‌بند
bluetooth.servicenet-wireless/bluezبلوتوث

Targetها (نسخهٔ systemd از runlevelها)#

systemd از مفهوم «target» به‌جای runlevel استفاده می‌کند. هر target مجموعه‌ای از unitها است:

Targetمعادل SysV runlevelکاربرد
poweroff.target0خاموش‌کردن سیستم
rescue.target1حالت تک‌کاربره (rescue)
multi-user.target3چندکاربره بدون گرافیک
graphical.target5چندکاربره با گرافیک
reboot.target6ریبوت سیستم
default.target—target پیش‌فرض (معمولاً graphical یا multi-user)
# مشاهده target پیش‌فرض
systemctl get-default
# خروجی:
# graphical.target
 
# تغییر target پیش‌فرض
systemctl set-default multi-user.target
# Removed symlink /etc/systemd/system/default.target.
# Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/multi-user.target.
 
# تغییر موقت target (بدون ریبوت)
systemctl isolate multi-user.target

تحلیل زمان بوت با systemd-analyze#

یکی از ابزارهای مفید systemd، systemd-analyze است که زمان بوت را تحلیل می‌کند:

# زمان کل بوت
systemd-analyze
# خروجی:
# Startup finished in 5.221s (firmware) + 2.104s (loader)
# + 1.890s (kernel) + 3.234s (userspace) = 12.450s
# graphical.target reached after 3.123s in userspace
 
# زمان هر سرویس (پر#abuse)
systemd-analyze blame | head
# خروجی:
# 1.234s NetworkManager-wait-online.service
#   845ms dev-sda1.device
#   612ms systemd-udevd.service
#   412ms sshd.service
#   387ms systemd-journald.service
# ...
 
# درخت وابستگی بحرانی
systemd-analyze critical-chain
# خروجی:
# graphical.target @3.123s
# └─multi-user.target @3.120s
#   └─sshd.service @412ms +45ms
#     └─network.target @411ms
#       └─NetworkManager.service @310ms +100ms
# ...

غیرفعال‌کردن سرویس‌های کند

اگر NetworkManager-wait-online.service زمان زیادی می‌برد و به آن نیاز ندارید، می‌توانید آن را غیرفعال کنید:

systemctl disable NetworkManager-wait-online.service

پیکربندی با /etc/systemd/system#

فایل‌های unit در سه مسیر قرار دارند (به ترتیب اولویت):

  1. /etc/systemd/system/ — پیکربندی مدیر سیستم (بالاترین اولویت)
  2. /run/systemd/system/ — فایل‌های موقت runtime
  3. /usr/lib/systemd/system/ — فایل‌های نصب‌شده توسط بسته‌ها

برای سفارشی‌سازی یک unit، آن را با systemctl edit باز کنید:

# سفارشی‌سازی sshd
systemctl edit sshd.service
# این یک فایل drop-in در /etc/systemd/system/sshd.service.d/ می‌سازد
# محتوای نمونه:
# [Service]
# Environment=OPTIONS="-p 2222"
 
# بارگذاری مجدد systemd
systemctl daemon-reload
systemctl restart sshd

هرگز فایل /usr/lib را مستقیم ویرایش نکنید

فایل‌های unit در /usr/lib/systemd/system/ با به‌روزرسانی بسته بازنویسی می‌شوند. همیشه از systemctl edit استفاده کنید؛ این دستور یک فایل drop-in در /etc/systemd/system/ می‌سازد و تغییرات شما حفظ می‌شوند.

خطاهای رایج#

۱. خطای dbus پس از تغییر پروفایل#

Failed to connect to bus: No such file or directory

دلیل: سیستم در حالت OpenRC بوت شده اما شما سعی می‌کنید systemctl اجرا کنید. راه‌حل:

# ریبوت به‌منظور ورود به systemd
reboot
# پس از بوت، بررسی کنید:
ps -p 1 -o comm=
# باید خروجی systemd باشد، نه init یا openrc-init

۲. سرویس failed در بوت#

systemctl status sshd
# Active: failed (Result: exit-code)

راه‌حل:

# مشاهده لاگ کامل
journalctl -u sshd -n 50
# بررسی فایل unit
systemctl cat sshd
# تست دستی
/usr/sbin/sshd -t   # تست پیکربندی

۳. machinectl یا loginctl خطا می‌دهد#

Failed to activate service 'org.freedesktop.login1': timed out

دلیل: سرویس systemd-logind اجرا نمی‌شود یا dbus مشکل دارد. راه‌حل:

systemctl restart dbus
systemctl restart systemd-logind
# بررسی
systemctl status systemd-logind

۴. زمان بوت بسیار طولانی#

دلیل: یک سرویس در بوت منتظر چیزی است. راه‌حل:

systemd-analyze blame | head -20
# پیدا کنید کدام سرویس کند است
systemctl disable <slow-service>

خلاصه و مرحله بعد#

systemd در Gentoo انتخابی اختیاری و محبوب میان کاربرانی است که به دنبال سازگاری با دسکتاپ‌های مدرن (GNOME) یا ابزارهای ابری هستند. مدیریت آن با systemctl و مشاهدهٔ لاگ با journalctl انجام می‌شود. این سیستم یکپارچه است، اما انعطاف کمتری نسبت به OpenRC دارد.

برای مقایسه با پیش‌فرض Gentoo، آموزش OpenRC را ببینید. برای پیکربندی شبکه با NetworkManager، آموزش networking را مطالعه کنید. اگر هنوز در مرحله نصب هستید، آموزش Stage3 را مرور کنید.

اشتراک‌گذاری:

این صفحه در تاریخ ۱ تیر ۱۴۰۵ به‌روزرسانی شده است.