journalctl ورودیهای journal مربوط به systemd را چاپ میکند و روی اوبونتو راه اصلی خواندن لاگ سرویسهاست. با فیلتر واحد (-u)، بوت (-b) و زمان میتوانید بهجای جستوجوی کور در فایلهای متنی، سریع به خطا برسید. این آموزش مسیر مبتدی را جمع میکند.
پیشنیازها
- اوبونتو با systemd (نصب پیشفرض).
- دسترسی به journal سیستم اغلب به عضویت در گروه adm یا استفاده از sudo نیاز دارد.
- نام واحد را اول با systemctl status تأیید کنید؛ نام کوتاه مثل nginx معمولاً به nginx.service resolve میشود.
خواندن لاگ از صفر
- نام واحد را با systemctl status تأیید کنید.
- لاگ همان سرویس را ببینید:
journalctl -u nginx.service
- لاگ بوت جاری:
journalctl -b
- لاگ بوت قبلی (پس از کرش و آمدن دوبارهٔ سرور مفید است):
journalctl -b -1
- بازهٔ زمانی را محدود کنید:
journalctl --since "1 hour ago"
- برای بازتولید زندهٔ خطا، follow را روشن کنید و با Ctrl+C تمام کنید:
journalctl -u ssh -f
پرچمهای مفید و تفاوت با فایل لاگ
- -p: شدت را محدود میکند (مثلاً err).
- -n: تعداد خطوط آخر را میبرد.
- journal ساختیافته است و بوت و واحد را میفهمد؛ بعضی بستهها همچنان در /var/log هم مینویسند — در عیبیابی جدی هر دو منبع را بررسی کنید.
- برای واحد کاربر، journalctl --user فضای جدا دارد و با لاگ سیستمی قاطی نمیشود.
اشتباه پرتکرار: بعد از دیدن failed در systemctl دوباره restart میزنند بدون خواندن journal. همان خطا معمولاً در چند خط آخر journalctl -u یا -xe آمده است. اول بخوانید، بعد restart کنید.
Permission denied: اگر بدون ارتقا خروجی خالی یا کوتاه دیدید، اول مجوز را بررسی کنید نه نام واحد را.
اگر خروجی خالی است، با این الگو نام دقیق را پیدا کنید:
systemctl list-units --type=service
پسوند .socket یا .timer را با .service اشتباه نگیرید.
چکلیست آزمایشگاهی
- در صورت Permission denied از sudo استفاده کنید.
- اول -u درست، بعد grep سراسری.
- پس از کرش، -b -1 را فراموش نکنید.
- با --since یا -n نویز سرویسهای شلوغ را کم کنید.
- حالت follow را با Ctrl+C تمام کنید.
persist بودن journal به تنظیمات journald وابسته است؛ روی بعضی نصبهای مینیمال ممکن است پس از ریبوت تاریخچه محدود بماند. این آموزش فرض را روی رفتار پیشفرض اوبونتو میگذارد.
منبع: journalctl(1) — Ubuntu noble.
برای سرویس failed بعدی، اول status را میبینید یا مستقیم journalctl -u؟