</>

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

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

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

Command Palette

Search for a command to run...

systemd در Debian

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

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

systemd سیستم init پیش‌فرض Debian از نسخهٔ ۸ (Jessie) به بعد است. این سیستم مسئول راه‌اندازی سرویس‌ها، مدیریت نشست‌ها، لاگ‌گذاری و بسیاری از وظایف سیستمی است. در این آموزش با دستورهای اصلی و مفاهیم کلیدی systemd آشنا می‌شوید.

systemd چیست؟#

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

init پیش‌فرض Debian

برخلاف Gentoo که به شما اجازه می‌دهد بین systemd و OpenRC یکی را انتخاب کنید، Debian به‌طور پیش‌فرض از systemd استفاده می‌کند. در Debian 12، systemd نسخهٔ 252 است.

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

دستور systemctl#

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

# شروع سرویس
sudo systemctl start ssh
 
# توقف سرویس
sudo systemctl stop ssh
 
# راه‌اندازی مجدد
sudo systemctl restart ssh
 
# بارگذاری مجدد پیکربندی بدون قطع
sudo systemctl reload ssh
 
# فعال‌سازی برای بوت (معادل chkconfig on)
sudo systemctl enable ssh
# خروجی:
# Synchronizing state of ssh.service with SysV service script...
# Created symlink /etc/systemd/system/multi-user.target.wants/ssh.service → /lib/systemd/system/ssh.service.
 
# غیرفعال‌سازی از بوت
sudo systemctl disable ssh
 
# شروع و فعال‌سازی همزمان
sudo systemctl enable --now ssh
 
# مشاهدهٔ وضعیت
systemctl status ssh
# خروجی:
# ● ssh.service - OpenBSD Secure Shell server
#      Loaded: loaded (/lib/systemd/system/ssh.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

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
# خروجی:
# -1 2026-06-29 09:23:11 ... 2026-06-29 22:11:45
#  0 2026-06-30 08:15:33 ...
journalctl -b -1   # بوت قبلی
 
# فقط خطاهای سطح error و بالاتر
journalctl -p err
 
# ۵۰ خط آخر یک سرویس
journalctl -u ssh -n 50

journald در برابر syslog

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

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

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

Unitبستهکاربرد
ssh.serviceopenssh-serverسرور SSH
networking.serviceifupdownشبکهٔ کلاسیک (سرور)
NetworkManager.servicenetwork-managerشبکهٔ گرافیکی (دسکتاپ)
systemd-timesyncd.serviceداخلیهمگام‌سازی زمان (NTP سبک)
cron.servicecronزمان‌بند وظایف
rsyslog.servicersyslogلاگ متنی کلاسیک
nginx.servicenginxوب‌سرور Nginx
apache2.serviceapache2وب‌سرور Apache
postgresql.servicepostgresqlدیتابیس PostgreSQL
docker.servicedocker.ioDocker

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 پیش‌فرض
# مشاهدهٔ target پیش‌فرض
systemctl get-default
# خروجی:
# graphical.target
 
# تغییر target پیش‌فرض (سرور بدون گرافیک)
sudo systemctl set-default multi-user.target
 
# تغییر موقت target (بدون ریبوت)
sudo systemctl isolate multi-user.target
 
# بوت به حالت rescue
sudo systemctl rescue

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

ابزار 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 ssh.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 زمان زیادی می‌برد و به آن نیاز ندارید، می‌توانید آن را غیرفعال کنید:

sudo systemctl disable NetworkManager-wait-online.service

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

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

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

  1. /etc/systemd/system/ — پیکربندی مدیر سیستم (بالاترین اولویت)
  2. /run/systemd/system/ — فایل‌های موقت runtime
  3. /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 <<EOF
[Unit]
Description=Backup service
 
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
EOF
 
# تعریف تایمر
sudo tee /etc/systemd/system/backup.timer <<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

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

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

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

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

# تنظیم hostname
sudo hostnamectl set-hostname debian-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
#          RTC in local TZ: no
 
# فعال‌کردن 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

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

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

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

# پیدا کردن سرویس‌های کند
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 استفاده کنید.

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

systemd در Debian قلب مدیریت سرویس‌ها، لاگ‌گذاری و بوت است. با systemctl سرویس‌ها را مدیریت می‌کنید، با journalctl لاگ‌ها را می‌بینید و با systemd-analyze عملکرد بوت را تحلیل می‌کنید. این ابزارها جایگزین دستورات قدیمی مانند service، chkconfig و /var/log/messages شده‌اند.

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

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

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