</>

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

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

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

Command Palette

Search for a command to run...

systemd در Arch Linux

آشنایی کامل با systemd: سیستم init پیش‌فرض Arch Linux، مدیریت سرویس‌ها، jornaling، و پیکربندی واحدها.

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

systemd سیستم init و مدیر سرویس پیش‌فرض Arch Linux است. از زمان راه‌اندازی سیستم تا مدیریت سرویس‌های پس‌زمینه، systemd نقشی مرکزی دارد. در این آموزش با مفاهیم، دستورات و پیکربندی systemd آشنا می‌شویم.

systemd چیست؟#

systemd یک سیستم init مدرن است که در سال ۲۰۱۰ معرفی شد و امروزه در اکثر توزیع‌های بزرگ لینوکس (Arch, Debian, Ubuntu, Fedora, RHEL) به‌عنوان سیستم init پیش‌فرض استفاده می‌شود. وظایف اصلی آن:

  • راه‌اندازی سرویس‌ها به‌صورت موازی (سریع‌تر از sysvinit)
  • مدیریت وابستگی‌ها بین سرویس‌ها
  • نظارت بر اجرای سرویس‌ها (در صورت کرش، restart می‌شوند)
  • مدیریت لاگ‌ها با journald
  • مدیریت دستگاه‌ها با udevd
  • مدیریت شبکه با systemd-networkd (اختیاری)

systemd در برابر OpenRC

برخی توزیع‌ها مانند Gentoo از OpenRC استفاده می‌کنند که سبک‌تر و سنتی‌تر است. Arch تنها از systemd پشتیبانی رسمی می‌کند. برای کاربران Arch، یادگیری systemd ضروری است.

مفهوم Unit#

در systemd، هر منبع مدیریت‌شده یک unit نامیده می‌شود. انواع unitها:

نوعپسوندکاربرد
Service.serviceسرویس‌ها (مثل sshd, NetworkManager)
Socket.socketسوکت‌های IPC
Device.deviceدستگاه‌های شناخته‌شده
Mount.mountنقطه‌های نصب
Timer.timerزمان‌بندی مانند cron
Target.targetگروهی از unitها (مثل multi-user.target)
Swap.swapفضای swap
Path.pathنظارت بر مسیر فایل

دستور systemctl#

systemctl دستور اصلی مدیریت systemd است:

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

# شروع یک سرویس
sudo systemctl start sshd
 
# توقف
sudo systemctl stop sshd
 
# راه‌اندازی مجدد
sudo systemctl restart sshd
 
# بارگذاری مجدد پیکربندی (بدون restart)
sudo systemctl reload sshd
 
# نمایش وضعیت
systemctl status sshd

فعال‌سازی در بوت#

# فعال‌سازی سرویس در بوت
sudo systemctl enable sshd
 
# غیرفعال‌سازی
sudo systemctl disable sshd
 
# فعال‌سازی و شروع هم‌زمان
sudo systemctl enable --now sshd
 
# غیرفعال‌سازی و توقف هم‌زمان
sudo systemctl disable --now sshd

تفاوت start و enable

  • start سرویس را اکنون اجرا می‌کند اما در بوت بعدی اجرا نمی‌شود
  • enable سرویس را در بوت بعدی اجرا می‌کند اما اکنون اجرا نمی‌کند
  • enable --now هر دو کار را هم‌زمان انجام می‌دهد

بررسی وضعیت#

# وضعیت یک سرویس
systemctl status NetworkManager
 
# آیا در حال اجراست؟
systemctl is-active NetworkManager
 
# آیا در بوت فعال است؟
systemctl is-enabled NetworkManager
 
# وضعیت کل سیستم
systemctl status

فهرست سرویس‌ها#

# همهٔ unitهای بارگذاری‌شده
systemctl list-units
 
# فقط سرویس‌ها
systemctl list-units --type=service
 
# سرویس‌های فعال در بوت
systemctl list-unit-files --type=service --state=enabled
 
# سرویس‌های ناموفق
systemctl --failed

جستجوی unitها#

# جستجوی unit بر اساس نام
systemctl list-units '*network*'
 
# نمایش همهٔ unitها (حتی غیرفعال)
systemctl list-units --all
 
# نمایش فایل‌های unit
systemctl list-unit-files

Journal — لاگ‌های systemd#

journalctl ابزار مشاهدهٔ لاگ‌های systemd است:

مشاهدهٔ لاگ‌ها#

# همهٔ لاگ‌ها
journalctl
 
# لاگ‌های بوت فعلی
journalctl -b
 
# لاگ‌های بوت قبلی
journalctl -b -1
 
# لاگ‌های سه بوت اخیر
journalctl --list-boots

فیلتر کردن#

# لاگ یک سرویس خاص
journalctl -u sshd
 
# لاگ چند سرویس
journalctl -u sshd -u NetworkManager
 
# لاگ از زمان مشخص
journalctl --since today
journalctl --since "2026-06-01" --until "2026-06-30"
journalctl --since "1 hour ago"
 
# لاگ بر اساس اولویت (err, warning, info, debug)
journalctl -p err
journalctl -p warning

مشاهدهٔ زنده#

# پیگیری زندهٔ لاگ (مثل tail -f)
journalctl -f
 
# پیگیری زندهٔ یک سرویس
journalctl -u sshd -f

خروجی JSON#

# خروجی با فرمت JSON (برای پردازش با jq)
journalctl -u sshd -o json | jq .

مدیریت هدف‌های بوت (Targets)#

Targets معادل runlevelها در sysvinit هستند:

# مشاهدهٔ target فعلی
systemctl get-default
 
# تغییر target پیش‌فرض
sudo systemctl set-default multi-user.target    # محیط خط فرمان
sudo systemctl set-default graphical.target     # محیط گرافیکی
 
# تغییر موقت target
sudo systemctl isolate multi-user.target

Targetهای مهم

  • multi-user.target — خط فرمان با شبکه (معادل runlevel 3)
  • graphical.target — محیط گرافیکی (معادل runlevel 5)
  • rescue.target — حالت نجات تک‌کاربره
  • emergency.target — حالت اضطراری با حداقل سرویس

مدیریت منابع#

Restart خودکار سرویس#

در فایل unit می‌توانید تنظیم کنید که سرویس در صورت کرش restart شود:

[Service]
Restart=on-failure
RestartSec=5s

محدودیت منابع#

systemd می‌تواند منابع سرویس را محدود کند:

[Service]
MemoryMax=500M
CPUQuota=50%
TasksMax=100

ساخت سرویس سفارشی#

می‌توانید سرویس سفارشی خود را بسازید. مثلاً اسکریپت پشتیبان‌گیری:

sudo nano /etc/systemd/system/backup.service
[Unit]
Description=Daily backup service
After=network-online.target
 
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
User=backup
Group=backup
 
[Install]
WantedBy=multi-user.target

سپس تایمر برای اجرای روزانه:

sudo nano /etc/systemd/system/backup.timer
[Unit]
Description=Run backup daily
 
[Timer]
OnCalendar=daily
Persistent=true
 
[Install]
WantedBy=timers.target

فعال‌سازی:

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer

تایمرهای systemd در برابر cron#

systemd timers جایگزین مدرن cron هستند:

ویژگیsystemd timercron
وابستگی به سرویسبلهخیر
اجرا در زمان بوت نشدهPersistent=yesخیر
لاگ‌گذاریjournalsyslog
انعطاف‌پذیریبالامتوسط
یادگیریسخت‌ترآسان‌تر

استفاده از systemd timers

برای کارهای جدید، systemd timers را ترجیح دهید. اما برای اسکریپت‌های قدیمی یا ساده، cron همچنان کار می‌کند.

نمودار زمان بوت#

# زمان کل بوت
systemd-analyze
 
# زمان هر سرویس
systemd-analyze blame
 
# نمودار بحرانی بوت
systemd-analyze critical-chain
 
# نمودار SVG کامل
systemd-analyze plot > boot.svg

پیکربندی hostname و locale با systemd#

systemd ابزارهایی برای تنظیمات سیستمی دارد:

# تنظیم hostname
sudo hostnamectl set-hostname myarch
 
# نمایش اطلاعات سیستم
hostnamectl
 
# تنظیم locale
sudo localectl set-locale LANG=en_US.UTF-8
 
# تنظیم چیدمان صفحه‌کلید
sudo localectl set-keymap us
sudo localectl set-x11-keymap us
 
# تنظیم منطقهٔ زمانی
sudo timedatectl set-timezone Asia/Tehran
 
# فعال‌سازی همگام‌سازی زمان
sudo timedatectl set-ntp true
timedatectl status

خطاهای رایج#

سرویس در حالت failed#

# مشاهدهٔ سرویس‌های ناموفق
systemctl --failed
 
# بررسی جزئیات
systemctl status failed-service
journalctl -u failed-service -b

سرویس در حالت activating#

اگر سرویس گیر کرده است:

# توقف اضطراری
sudo systemctl kill service-name
 
# توقف موقت
sudo systemctl mask service-name

فعال‌سازی مجدد فایل unit#

اگر فایل unit را ویرایش کرده‌اید:

sudo systemctl daemon-reload
sudo systemctl restart service-name

خلاصه#

در این آموزش:

  • با مفهوم unit و انواع آن آشنا شدید
  • با systemctl سرویس‌ها را مدیریت کردید
  • با journalctl لاگ‌ها را بررسی کردید
  • با targets، timers و سرویس‌های سفارشی آشنا شدید
  • ابزارهای hostnamectl, localectl, timedatectl را یاد گرفتید

systemd قلب Arch Linux است و تسلط بر آن، مدیریت سیستم را بسیار آسان می‌کند.

در آموزش بعدی، با مدیریت کاربران در Arch آشنا می‌شوید.

پرسش‌های رایج#

آیا می‌توانم از systemd استفاده نکنم؟#

در Arch، خیر. Arch تنها از systemd پشتیبانی رسمی می‌کند. اگر به دنبال توزیع بدون systemd هستید، می‌توانید Artix (مبتنی بر Arch با OpenRC) را امتحان کنید.

چگونه سرویس را به‌طور کامل غیرفعال کنم؟#

# توقف و غیرفعال‌سازی
sudo systemctl disable --now service-name
 
# ماسک کردن (جلوگیری از فعال‌سازی دستی یا وابستگی)
sudo systemctl mask service-name

تفاوت reload و restart چیست؟#

  • restart سرویس را کامل متوقف و دوباره اجرا می‌کند
  • reload فقط پیکربندی را بدون توقف کامل بارگذاری مجدد می‌کند (اگر سرویس پشتیبانی کند)
اشتراک‌گذاری:

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