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-filesJournal — لاگهای 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.targetTargetهای مهم
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 timer | cron |
|---|---|---|
| وابستگی به سرویس | بله | خیر |
| اجرا در زمان بوت نشده | Persistent=yes | خیر |
| لاگگذاری | journal | syslog |
| انعطافپذیری | بالا | متوسط |
| یادگیری | سختتر | آسانتر |
استفاده از 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فقط پیکربندی را بدون توقف کامل بارگذاری مجدد میکند (اگر سرویس پشتیبانی کند)
این صفحه در تاریخ ۹ تیر ۱۴۰۵ بهروزرسانی شده است.