در لینوکس مدرن، مدیریت سرویسها و بررسی لاگهای سیستم با ابزارهای systemd یکپارچه شده است. systemd بهعنوان مدیر سرویس و سیستم، جایگزین سیستمهای قدیمیتر مانند SysVinit شده و در اکثر توزیعهای امروزی بهصورت پیشفرض استفاده میشود . در این درس با سه ابزار کلیدی این حوزه آشنا میشویم: systemctl برای مدیریت سرویسها، journalctl برای مشاهده لاگهای متمرکز، و dmesg برای بررسی پیامهای هسته.
مدیریت سرویسها با systemctl
دستور systemctl رابط کاربری اصلی برای تعامل با systemd و مدیریت سرویسها (و سایر واحدها) است .
ساختار کلی:
systemctl [command] [unit]
عملیات پایه روی سرویسها
| دستور | عملکرد |
|---|---|
systemctl start service | شروع یک سرویس (فقط برای همان جلسه) |
systemctl stop service | توقف سرویس |
systemctl restart service | راهاندازی مجدد سرویس |
systemctl reload service | بارگذاری مجدد پیکربندی بدون توقف کامل (در صورت پشتیبانی) |
systemctl status service | نمایش وضعیت دقیق سرویس، شامل لاگهای اخیر و اطلاعات CGroup |
مثالها:
sudo systemctl start nginx sudo systemctl stop apache2 sudo systemctl status sshd
مدیریت راهاندازی خودکار
عملیات start و stop فقط وضعیت فعلی سرویس را تغییر میدهند و پس از ریبوت، سرویس به تنظیمات پیشفرض خود بازمیگردد . برای مدیریت راهاندازی خودکار در زمان بوت از دستورات زیر استفاده میشود:
| دستور | عملکرد |
|---|---|
systemctl enable service | فعال کردن شروع خودکار سرویس در بوت (ایجاد symbolic link) |
systemctl disable service | غیرفعال کردن شروع خودکار |
systemctl enable --now service | فعال کردن و شروع سرویس بهصورت همزمان |
systemctl is-enabled service | بررسی وضعیت فعال بودن سرویس |
systemctl mask service | ماسک کردن سرویس (غیرفعالسازی کامل و جلوگیری از شروع تصادفی) |
systemctl unmask service | برداشتن ماسک |
مثالها:
sudo systemctl enable docker sudo systemctl disable bluetooth sudo systemctl mask httpd
مشاهده وضعیت و اطلاعات بیشتر
-
مشاهده وضعیت دقیق یک سرویس:
systemctl status sshd
خروجی این دستور شامل وضعیت اجرا، PID اصلی، مصرف حافظه، وظایف (Tasks) و چند خط آخر لاگ مرتبط با سرویس است .
-
لیست سرویسهای فعال:
systemctl list-units --type=service
این دستور تمام سرویسهای بارگذاریشده و فعال را به همراه نام دقیق آنها نمایش میدهد .
-
مشاهده سرویسهای با مشکل:
systemctl --failed -
دستور
serviceقدیمی: در توزیعهای مبتنی برsystemd، دستور قدیمیserviceهمچنان کار میکند و بهصورت خودکار بهsystemctlهدایت میشود .
بررسی لاگها با journalctl
journald بخشی از systemd است که لاگهای سیستم و سرویسها را بهصورت متمرکز جمعآوری میکند . دستور journalctl برای مشاهده و فیلتر کردن این لاگها استفاده میشود.
ساختار کلی:
journalctl [options]
گزینههای مهم فیلتر کردن
| گزینه | عملکرد | مثال |
|---|---|---|
-u, --unit=UNIT | فیلتر بر اساس نام واحد (سرویس) | journalctl -u nginx |
-b, --boot | نمایش لاگهای مربوط به یک بوت خاص (-b 0 برای بوت جاری، -b -1 برای بوت قبلی) | journalctl -b -1 |
-p, --priority=PRI | فیلتر بر اساس سطح اولویت (مانند err, warning, info) | journalctl -p err |
-f, --follow | دنبال کردن لاگها در لحظه (مشابه tail -f) | journalctl -f |
-k, --dmesg | نمایش فقط پیامهای هسته (مشابه dmesg) | journalctl -k |
-n, --lines=N | نمایش تعداد N خط آخر | journalctl -n 50 |
--since و --until | فیلتر بر اساس زمان | journalctl --since "1 hour ago" |
-r, --reverse | نمایش جدیدترین پیامها در ابتدا | journalctl -u ssh -r |
مثالهای ترکیبی:
-
مشاهده لاگهای خطای سرویس
apache2از بوت جاری:journalctl -u apache2 -p err -b
-
دنبال کردن لاگهای سرویس
dockerاز یک ساعت پیش بهبعد:journalctl -u docker -f --since "1 hour ago"
-
مشاهده لاگهای چند سرویس بهطور همزمان :
journalctl -u nginx -u mysql -f
برای اطمینان از باقیماندن لاگهای بوتهای قبلی پس از ریبوت، باید ذخیرهسازی پایدار (Persistent) برای
journaldفعال شود .
بررسی پیامهای هسته با dmesg
دستور dmesg پیامهای بافر حلقوی هسته (Kernel Ring Buffer) را نمایش میدهد . این پیامها شامل اطلاعات مربوط به تشخیص سختافزار، بارگذاری درایورها، و رویدادهای سطح پایین سیستم هستند و برای عیبیابی مشکلات سختافزاری و هسته بسیار مفیدند .
ساختار کلی:
dmesg [options]
گزینههای مهم:
| گزینه | عملکرد |
|---|---|
-T, --ctime | نمایش زمانها بهصورت قابل خواندن برای انسان |
-w, --follow | دنبال کردن پیامهای جدید هسته (مشابه tail -f) |
-l, --level list | فیلتر بر اساس سطح لاگ (مانند err, warn) |
-c, --read-clear | چاپ و سپس پاک کردن بافر |
-C, --clear | پاک کردن بافر بدون چاپ |
مثالها:
-
مشاهده تمام پیامهای هسته با زمانهای خوانا:
dmesg -T
-
نمایش فقط پیامهای خطا و هشدار:
dmesg -l err,warn
-
جستجوی پیامهای مربوط به یک دستگاه خاص (مثلاً دیسک
sda):dmesg -T | grep -i sda
نکته: بافر
dmesgبا هر بار ریبوت پاک میشود، بنابراین برای بررسی مشکلات بوت قبلی، باید بلافاصله پس از راهاندازی مجدد سیستم از آن استفاده کرد یا بهjournalctl -k -b -1مراجعه کرد .
جمعبندی و روند کار پیشنهادی
| ابزار | کاربرد اصلی | نکته کلیدی |
|---|---|---|
systemctl | مدیریت چرخه حیات سرویسها و تنظیمات بوت | از enable برای شروع خودکار و start برای اجرای لحظهای استفاده کنید |
journalctl | مشاهده و فیلتر کردن لاگهای متمرکز تمام سیستم و سرویسها | با -u سرویس، -p اولویت، و -b بوت خاص را فیلتر کنید |
dmesg | مشاهده پیامهای سطح پایین هسته (سختافزار، درایورها) | برای عیبیابی مشکلات سختافزاری و بوت ضروری است |
روند پیشنهادی برای عیبیابی:
-
اگر سرویسی مشکل دارد، ابتدا با
systemctl status serviceوضعیت و لاگهای مختصر آن را ببینید. -
برای بررسی دقیقتر، از
journalctl -u service -p err -bبرای مشاهده خطاهای آن سرویس در بوت جاری استفاده کنید. -
اگر مشکل به سختافزار یا هسته مربوط است، با
dmesg -T | grep -i errorیاjournalctl -k -p errبه بررسی بگردید. -
برای بررسی مشکلات بوت قبلی (مثلاً پس از هنگ سیستم)، از
journalctl -b -1وdmesg -T(بلافاصله پس از بوت مجدد) استفاده کنید .