فرایندها، systemd و journalctl

فرایند چیست؟

هر برنامهٔ در حال اجرا یک یا چند فرایند دارد. هر فرایند شناسه‌ای به نام PID دارد و معمولاً از یک فرایند والد ایجاد شده است. هنگام عیب‌یابی، ابتدا باید بدانید چه چیزی اجرا می‌شود، با کدام کاربر اجرا می‌شود و چه مقدار CPU یا حافظه مصرف می‌کند.

1ps aux
2ps -ef
3pgrep -a sshd
4top
  • ps aux نمایی کامل از فرایندهای فعلی می‌دهد.
  • pgrep -a فرایندهای منطبق با نام را همراه آرگومان‌های اجرای آن‌ها پیدا می‌کند.
  • top نمای زنده از مصرف منابع است؛ با q از آن خارج شوید.

یک دستور طولانی را با & در پس‌زمینه اجرا کنید. jobs فقط کارهای shell فعلی را نشان می‌دهد؛ fg کار را به پیش‌زمینه می‌آورد:

1sleep 300 &
2jobs
3fg %1

سیگنال‌ها و توقف فرایند

برای درخواست توقف یک فرایند از سیگنال استفاده می‌شود. SIGTERM درخواست مودبانه برای پایان کار است و به برنامه فرصت می‌دهد فایل‌ها و اتصال‌ها را ببندد. SIGKILL قابل‌مدیریت نیست و فقط باید آخرین راه باشد:

1kill -TERM <pid>
2kill -KILL <pid>

پیش از ارسال سیگنال، PID و مالک فرایند را بررسی کنید. kill -9 بدون بررسی می‌تواند داده را خراب کند یا سرویس وابسته را از کار بیندازد. برای سرویس‌های systemd، از systemctl استفاده کنید تا مدیر سرویس وضعیت را درست نگه دارد.

systemd و unitها

در بسیاری از توزیع‌های امروز، systemd فرایند آغازین و مدیر سرویس است. systemd رفتار مؤلفه‌های سامانه را در فایل‌هایی به نام unit تعریف می‌کند. رایج‌ترین نوع‌ها service، socket، timer و target هستند.

برای مشاهده و کنترل یک سرویس، نام unit را کامل بنویسید. نام سرویس SSH بسته به توزیع می‌تواند ssh.service یا sshd.service باشد:

1sudo systemctl status ssh.service
2sudo systemctl start ssh.service
3sudo systemctl restart ssh.service
4sudo systemctl stop ssh.service
5sudo systemctl enable ssh.service
6sudo systemctl enable --now ssh.service
7sudo systemctl disable ssh.service
  • start و stop وضعیت اکنون را تغییر می‌دهند.
  • enable اجرای سرویس را در راه‌اندازی بعدی فعال می‌کند؛ به‌تنهایی سرویس را همین حالا اجرا نمی‌کند.
  • enable --now سرویس را برای راه‌اندازی‌های بعدی فعال و هم‌زمان همین حالا اجرا می‌کند.
  • restart برای اعمال پیکربندی جدید یا بازگرداندن سرویس پس از خطا مفید است، اما پیش از آن اثر وقفهٔ کوتاه را در نظر بگیرید.

فهرست سرویس‌های ناموفق، نقطهٔ شروع خوبی برای بررسی وضعیت سامانه است:

1systemctl --failed
2systemctl list-units --type=service --state=running

خواندن لاگ‌ها با journalctl

journald رویدادهای systemd، هسته و سرویس‌هایی که به journal می‌نویسند را جمع می‌کند. journalctl به جای جست‌وجوی پراکنده در چند فایل لاگ، راهی یکپارچه برای بررسی این رویدادهاست.

1journalctl -u ssh.service
2journalctl -u ssh.service -b
3journalctl --since "2026-09-04 09:00" --until "2026-09-04 10:00"
4journalctl -p warning..alert -b
5sudo journalctl -u ssh.service -f
  • -u لاگ یک unit را محدود می‌کند.
  • -b فقط رویدادهای راه‌اندازی فعلی را نشان می‌دهد؛ -b -1 راه‌اندازی قبلی است.
  • -p warning..alert سطح‌های warning و شدیدتر را انتخاب می‌کند.
  • -f مانند tail -f منتظر رویدادهای جدید می‌ماند.

برای عیب‌یابی یک سرویس، این ترتیب ساده را دنبال کنید: systemctl status را بخوانید، لاگ همان unit را با journalctl -u ببینید، زمان رویداد را محدود کنید، پیکربندی را بررسی کنید و سپس تنها در صورت نیاز سرویس را بازراه‌اندازی کنید.

منابع یادگیری

مستندات و مقالات

ویدیو