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 میں بیان کی گئی ہے۔