</>

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

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

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

Command Palette

Search for a command to run...

systemd در Ubuntu

آموزش کامل systemd در Ubuntu: دستورات systemctl، journalctl، unitها، targetها، تحلیل زمان بوت و پیکربندی سرویس‌ها.

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

systemd سیستم init پیش‌فرض Ubuntu از نسخهٔ ۱۵.۰۴ (۲۰۱۵) به بعد است. این سیستم مسئول راه‌اندازی سرویس‌ها، مدیریت نشست‌ها، لاگ‌گذاری و بسیاری از وظایف سیستمی است. در این آموزش با دستورهای اصلی و مفاهیم کلیدی systemd آشنا می‌شوید.

systemd چیست؟#

systemd یک «مجموعهٔ نرم‌افزاری» است که شامل init سیستم، logger، login manager، network manager و بسیاری ابزار دیگر است. در Ubuntu، systemd به‌طور پیش‌فرض نصب و فعال است و جایگزین سیستم‌های قدیمی SysV init و Upstart شده است.

init پیش‌فرض Ubuntu

Ubuntu از نسخهٔ ۱۵.۰۴ به بعد به systemd مهاجرت کرد. در Ubuntu 24.04 LTS، systemd نسخهٔ ۲۵۵ است. این مهاجرت به‌جای Upstart (سیستم init قبلی Canonical) انجام شد.

ویژگیsystemdSysV init (قدیمی)
بوت موازیبلهخیر
Logger داخلیjournaldsyslog جداگانه
مدیریت نشستlogindندارد
وابستگی سرویس‌هاخودکاردستی
سرعت بوتسریعکندتر

دستور systemctl#

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

# شروع سرویس
sudo systemctl start ssh
 
# توقف سرویس
sudo systemctl stop ssh
 
# راه‌اندازی مجدد
sudo systemctl restart ssh
 
# بارگذاری مجدد پیکربندی بدون قطع
sudo systemctl reload ssh
 
# فعال‌سازی برای بوت
sudo systemctl enable ssh
 
# غیرفعال‌سازی از بوت
sudo systemctl disable ssh
 
# شروع و فعال‌سازی همزمان
sudo systemctl enable --now ssh
 
# مشاهدهٔ وضعیت
systemctl status ssh
# خروجی:
# ● ssh.service - OpenBSD Secure Shell server
#      Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
#      Active: active (running) since ... ago
#        Docs: man:sshd(8)
#    Main PID: 1234 (sshd)
# ...
 
# لیست همهٔ سرویس‌ها
systemctl list-units --type=service
 
# لیست سرویس‌های در حال اجرا
systemctl list-units --type=service --state=running
 
# لیست تمام سرویس‌های نصب‌شده
systemctl list-unit-files --type=service

enable + now

دستور systemctl enable --now ssh سرویس را هم بلافاصله شروع می‌کند و هم برای بوت بعدی فعال می‌سازد. این معادل دو دستور enable و start به‌صورت جداگانه است.

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

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

# همهٔ لاگ‌ها از بوت فعلی
journalctl
 
# لاگ‌های یک سرویس خاص
journalctl -u ssh
 
# لاگ‌های یک ساعت گذشته
journalctl --since "1 hour ago"
 
# لاگ‌های امروز
journalctl --since today
 
# پیگیری زنده (مانند tail -f)
journalctl -f
 
# لاگ‌های بوت قبلی
journalctl --list-boots
journalctl -b -1   # بوت قبلی
 
# فقط خطاهای سطح error و بالاتر
journalctl -p err
 
# ۵۰ خط آخر یک سرویس
journalctl -u ssh -n 50

journald در برابر syslog

journald لاگ‌ها را به‌صورت باینری در /var/log/journal/ ذخیره می‌کند. در Ubuntu، rsyslog هم معمولاً فعال است تا لاگ‌های متنی کلاسیک (مانند /var/log/syslog و /var/log/auth.log) را نگه دارد. این یعنی هر دو روش برای مشاهدهٔ لاگ در دسترس است.

Unitهای کلیدی در Ubuntu#

Unitبستهکاربرد
ssh.serviceopenssh-serverسرور SSH
networkd.serviceداخلیشبکهٔ systemd-networkd
NetworkManager.servicenetwork-managerشبکهٔ گرافیکی (دسکتاپ)
netplan.servicenetplan.ioاعمال پیکربندی Netplan
systemd-timesyncd.serviceداخلیهمگام‌سازی زمان (NTP سبک)
cron.servicecronزمان‌بند وظایف
rsyslog.servicersyslogلاگ متنی کلاسیک
nginx.servicenginxوب‌سرور Nginx
apache2.serviceapache2وب‌سرور Apache
docker.servicedocker-ceDocker
snapd.servicesnapdسرویس Snap

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

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

Targetمعادل SysV runlevelکاربرد
poweroff.target0خاموش‌کردن سیستم
rescue.target1حالت تک‌کاربره (rescue)
multi-user.target3چندکاربره بدون گرافیک (سرور)
graphical.target5چندکاربره با گرافیک (دسکتاپ)
reboot.target6ریبوت سیستم
default.target—target پیش‌فرض
# مشاهدهٔ target پیش‌فرض
systemctl get-default
# graphical.target   (در Ubuntu Desktop)
# multi-user.target  (در Ubuntu Server)
 
# تغییر target پیش‌فرض (سرور بدون گرافیک)
sudo systemctl set-default multi-user.target
 
# تغییر موقت target (بدون ریبوت)
sudo systemctl isolate multi-user.target
 
# بوت به حالت rescue
sudo systemctl rescue

تحلیل زمان بوت با 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
 
# زمان هر سرویس
systemd-analyze blame | head
# 1.234s NetworkManager-wait-online.service
#   845ms dev-sda1.device
#   612ms systemd-udevd.service
#   412ms ssh.service
 
# درخت وابستگی بحرانی
systemd-analyze critical-chain
 
# نمودار SVG از زمان بوت
systemd-analyze plot > boot.svg

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

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

sudo systemctl disable NetworkManager-wait-online.service

این سرویس برای اطمینان از اتصال شبکه پیش از ادامهٔ بوت است؛ برای دسکتاپ خانگی معمولاً ضروری نیست.

پیکربندی unitها#

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

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

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

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

مثال: ساخت تایمر به‌جای cron#

# تعریف سرویس
sudo tee /etc/systemd/system/backup.service > /dev/null <<'EOF'
[Unit]
Description=Backup service
 
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
EOF
 
# تعریف تایمر
sudo tee /etc/systemd/system/backup.timer > /dev/null <<'EOF'
[Unit]
Description=Daily backup
 
[Timer]
OnCalendar=daily
Persistent=true
 
[Install]
WantedBy=timers.target
EOF
 
# فعال‌سازی
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer

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

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

مدیریت زمان و hostname#

systemd ابزارهای مدیریت زمان و hostname را هم فراهم می‌کند:

# تنظیم hostname
sudo hostnamectl set-hostname ubuntu-server
 
# تنظیم timezone
sudo timedatectl set-timezone Asia/Tehran
 
# مشاهدهٔ وضعیت زمان
timedatectl status
#                Local time: Mon 2026-06-30 12:00:00 +0330
#            Universal time: Mon 2026-06-30 08:30:00 UTC
#                  Time zone: Asia/Tehran (+0330, +0330)
# System clock synchronized: yes
#               NTP service: active
 
# فعال‌کردن NTP
sudo timedatectl set-ntp true

خطاهای رایج#

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

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

راه‌حل:

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

۲. daemon-reload لازم است#

پس از ویرایش فایل unit، اگر daemon-reload اجرا نکنید، تغییرات اعمال نمی‌شوند:

sudo systemctl daemon-reload
sudo systemctl restart ssh

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

# پیدا کردن سرویس‌های کند
systemd-analyze blame | head -20
 
# غیرفعال‌کردن سرویس‌های غیرضروری
sudo systemctl disable NetworkManager-wait-online.service
sudo systemctl mask plymouth-quit-wait.service

mask در برابر disable

disable فقط سرویس را از بوت حذف می‌کند اما هنوز قابل start دستی است. mask سرویس را کاملاً غیرفعال می‌کند و حتی start دستی هم ممکن نیست. برای سرویس‌هایی که هرگز نمی‌خواهید اجرا شوند، از mask استفاده کنید.

۴. سرویس در حالت activating گیر می‌کند#

# بررسی وابستگی‌ها
systemctl list-dependencies ssh
 
# بررسی لاگ زنده
journalctl -u ssh -f

۵. snapd سرویس کندی است#

اگر snapd.service یا snapd.seeded.service زمان زیادی از بوت را می‌گیرد:

# غیرفعال‌کردن snap seeded check (در صورت عدم نیاز به snap در بوت)
sudo systemctl mask snapd.seeded.service

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

systemd در Ubuntu قلب مدیریت سرویس‌ها، لاگ‌گذاری و بوت است. با systemctl سرویس‌ها را مدیریت می‌کنید، با journalctl لاگ‌ها را می‌بینید و با systemd-analyze عملکرد بوت را تحلیل می‌کنید.

به‌عنوان گام بعدی:

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

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