Skip to content
VDS · مانیٹرنگ اور کارکردگی

systemd لاگز: journalctl آسان زبان میں

لاگ میں سروس کی ناکامی کی وجہ کیسے تلاش کریں، وقت اور سطح کے مطابق مطلوبہ چیز کیسے فلٹر کریں، اور لاگوں کو پوری ڈسک کھانے سے کیسے روکیں۔

اپ ڈیٹ 23 اگست، 2026

سسٹم پر ہونے والا تقریباً ہر واقعہ systemd journal میں محفوظ ہو جاتا ہے۔ کوئی سروس شروع نہ ہو، مشین خود بخود ری بوٹ ہو جائے، سائٹ 502 واپس کرے — جواب عموماً پہلے سے ریکارڈ شدہ ہوتا ہے، آپ کو صرف یہ جاننا ہے کہ کیسے پوچھنا ہے۔

پانچ کمانڈز جو کافی ہیں

journalctl -u nginx -n 50 --no-pager      # last 50 lines of one service
journalctl -u nginx -f                    # follow in real time
journalctl -p err -b                      # only errors since boot
journalctl --since "10 min ago"           # everything for the last ten minutes
journalctl -b -1 -e                       # previous boot log, end of file

آخری کمانڈ اچانک ری بوٹ کے بعد خاص طور پر قیمتی ہے: -b -1 پچھلا سیشن کھولتی ہے، اور آخر میں آپ دیکھ سکتے ہیں کہ یہ kernel panic تھا، OOM killer کام کر رہا تھا، یا صاف shutdown ہوا تھا۔

-p میں لیولز: emerg، alert، crit، err، warning، notice، info، debug۔ دیا گیا لیول اس سے زیادہ اہم تمام لیولز کو شامل کرتا ہے۔

ناکام سروس کی تشخیص

systemctl status myapp
journalctl -u myapp --since today -p warning

systemctl status exit code اور آخری لائنیں دیتی ہے، journalctl مکمل تصویر دیتی ہے۔ ان پر نظر ڈالیں:

  • Main process exited, code=exited, status=1 — ایپلیکیشن خود غلطی کے ساتھ بند ہوئی، وجہ اوپر والی لائن میں ہے؛
  • Failed to start ... Permission denied — فائل، ڈائریکٹری، یا 1024 سے کم پورٹ پر اجازتوں کا مسئلہ؛
  • kernel کی طرف سے Killed process ... (java) total-vm... — OOM killer متحرک ہوا، Out of memory پڑھیں؛
  • Start request repeated too quickly — سروس crash-loop کر رہی ہے، systemd نے اسے شروع کرنا بند کر دیا ہے؛ وجہ ٹھیک کریں اور systemctl reset-failed myapp چلائیں۔

سسٹم پر خراب ہر چیز کی فہرست systemctl --failed ہے۔

فلٹرز جو وقت بچاتے ہیں

journalctl --since "2026-08-22 03:00" --until "2026-08-22 04:00"
journalctl -u nginx -u php-fpm            # several services at once
journalctl _PID=1432                      # by specific process
journalctl -k                             # only kernel messages
journalctl -u sshd | grep "Failed password" | tail -20

grep کے ساتھ ملائیں، لیکن یاد رکھیں: journalctl بغیر --no-pager کے pager کھولتا ہے، q سے باہر نکلیں۔

journal کو ڈسک کھانے سے روکنا

بطور ڈیفالٹ، journal پارٹیشن کے 10% تک بڑھ جاتا ہے۔ 40 GB ڈسک والے VDS-1 پر یہ چار گیگابائٹ بنتا ہے — قابلِ توجہ۔

journalctl --disk-usage
journalctl --vacuum-size=200M
journalctl --vacuum-time=14d

مستقل حد /etc/systemd/journald.conf میں ہے:

[Journal]
SystemMaxUse=300M
MaxRetentionSec=1month

پھر systemctl restart systemd-journald۔

عام غلطیاں

  • journal کو بغیر -u کے پڑھنا۔ عمومی سٹریم سروس ریکارڈز سے بھرا ہوتا ہے، اور آپ کی مطلوبہ لائن گم ہو جاتی ہے۔ ہمیشہ اسے کسی سروس یا لیول تک محدود کریں۔
  • ری بوٹ کے بعد تاریخ کھو دینا۔ اگر /var/log/journal ڈائریکٹری موجود نہ ہو، تو journal صرف میموری میں رہتا ہے۔ اسے بنائیں: mkdir -p /var/log/journal && systemd-tmpfiles --create --prefix /var/log/journal۔
  • اس میں ایپلیکیشن کی غلطیاں ڈھونڈنا۔ Nginx، PostgreSQL اور اس جیسی چیزیں اپنی فائلوں میں /var/log کے تحت بھی لکھتی ہیں۔ اگر journal خالی ہو، تو وہاں دیکھیں۔

جب ڈسک بھر جائے، تو journalctl جگہ خالی ہونے تک کام کرنے سے انکار کر سکتا ہے۔ یہ صورتحال مضمون Out of disk space میں بیان کی گئی ہے۔