คำสั่ง journalctl: วิธีใช้ ล็อกแยกตามบริการ และการจัดการขนาด journal
คำสั่ง journalctl คือเครื่องมือสำหรับเลือกอ่านล็อกที่บริการและเคอร์เนลทิ้งไว้ใน journal ของ systemd บน Linux ที่ใช้ systemd นั้น systemd-journald จะรวบรวมล็อกเหล่านี้ไว้ใน journal เมื่อเลือกอ่านล็อกตามบริการ เวลา และระดับความสำคัญบนเซิร์ฟเวอร์ AlmaLinux 9 และเซิร์ฟเวอร์ Debian 12 พบว่าบัญชีทั่วไปเห็นเฉพาะล็อกของตัวเอง และเซิร์ฟเวอร์ที่เก็บ journal ไว้ในหน่วยความจำเลือกการบูตก่อนหน้าไม่ได้
ผลลัพธ์ด้านล่างมาจากเซิร์ฟเวอร์ทั้งสองเครื่อง ชื่อโฮสต์ บัญชี ID การบูต หมายเลขโพรเซสของเซิร์ฟเวอร์ AlmaLinux และรุ่นของแพ็กเกจ systemd ถูกแทนด้วยค่าตัวอย่าง และเซิร์ฟเวอร์ทั้งสองแสดงเวลาเป็น UTC
1️⃣ วิธีใช้คำสั่ง journalctl และดูล็อกล่าสุด
ถ้ารัน journalctl โดยไม่ใส่ตัวเลือก journal จะเปิดในหน้าจอ less ตั้งแต่บรรทัดที่เก่าที่สุด ดังนั้นเวลาจะดูล็อกล่าสุดให้กำหนดจำนวนบรรทัดด้วย -n ถ้าไม่ใส่ตัวเลขหลัง -n จะได้ 10 บรรทัด
journalctl -n 3Oct 28 07:14:06 server1 systemd[1]: session-3017.scope: Deactivated successfully.
Oct 28 07:14:06 server1 systemd[1]: session-3017.scope: Consumed 3.934s CPU time.
Oct 28 07:14:07 server1 sudo[851987]: pam_unix(sudo:session): session closed for user userแต่ละบรรทัดประกอบด้วยเวลา ชื่อโฮสต์ โปรแกรมที่เขียนล็อกพร้อมหมายเลขโพรเซส และข้อความ ตามลำดับ ใส่ -r แล้วลำดับจะกลับกัน บรรทัดล่าสุดจะขึ้นไปอยู่บนสุด ในล็อก crond ของเซิร์ฟเวอร์ AlmaLinux บรรทัด CMDEND ที่เขียนไว้หลังสุดอยู่บนสุด
journalctl -r -u crond -n 3Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)-f จะไม่จบหลังแสดงบรรทัดสุดท้าย แต่จะแสดงบรรทัดใหม่ที่เข้ามาต่อไปเรื่อย ๆ บนเซิร์ฟเวอร์ Debian 12 ใช้ -q และ -t myapp ค้างบรรทัดสุดท้ายของ logger ไว้บนหน้าจอ แล้วเขียนเพิ่มอีกสองบรรทัดด้วย logger ทั้งสองบรรทัดก็ต่อท้ายอยู่ด้านล่างทันที
journalctl -q -f -n 1 -t myappOct 28 07:12:46 server2 myapp[347704]: journalctl error test
Oct 28 07:14:35 server2 myapp[347881]: follow line 1
Oct 28 07:14:36 server2 myapp[347877]: follow line 2-f จะไม่หยุดจนกว่าจะกด Ctrl+C จึงใช้เฝ้าดูล็อกระหว่างที่บริการกำลังรีสตาร์ต
ในหน้าจอ less บรรทัดที่ยาวกว่าความกว้างหน้าจอจะถูกตัดทางขวา และดูส่วนที่ถูกตัดได้ด้วยปุ่มลูกศร ผลลัพธ์ที่ส่งต่อไปยังไปป์หรือไฟล์จะไม่ผ่าน less ถ้าต้องการแสดงบนเทอร์มินัลทันทีโดยไม่ผ่าน less ให้ใส่ --no-pager
2️⃣ ล็อกแยกตามบริการด้วย journalctl
บรรทัดล่าสุดจะมีล็อกของหลายบริการปนกัน ดังนั้นเวลาจะดูล็อกของบริการเดียวให้ระบุชื่อยูนิตด้วย -u ส่วน .service ท้ายชื่อยูนิตละไว้ได้
journalctl -u crond -n 4Oct 28 06:01:01 server1 CROND[802926]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)ถ้าเขียน -u สองครั้ง ล็อกของสองบริการจะออกมาปนกันตามลำดับเวลา เมื่อเลือก crond และ nginx พร้อมกันช่วง 08:00 ถึง 08:15 ของวันที่ 18 ตุลาคมบนเซิร์ฟเวอร์ AlmaLinux หลังบรรทัด crond สี่บรรทัดเวลา 08:01 ตามด้วยบรรทัด nginx reload สองบรรทัดเวลา 08:12
journalctl -u nginx -u crond --since '2026-10-18 08:00' --until '2026-10-18 08:15'Oct 18 08:01:01 server1 CROND[381522]: (root) CMD (run-parts /etc/cron.hourly)
Oct 18 08:01:01 server1 run-parts[381528]: (/etc/cron.hourly) starting 0anacron
Oct 18 08:01:01 server1 run-parts[381534]: (/etc/cron.hourly) finished 0anacron
Oct 18 08:01:01 server1 CROND[381518]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 18 08:12:30 server1 systemd[1]: Reloading nginx - high performance web server...
Oct 18 08:12:30 server1 systemd[1]: Reloaded nginx - high performance web server.systemctl status แสดงล็อกล่าสุดเพียง 10 บรรทัดใต้สถานะบริการ ล็อกที่เก่ากว่านั้นจึงต้องดูด้วย journalctl -u หลังรัน systemctl restart กับบริการแล้ว ให้รัน journalctl -u ทันทีเพื่อตรวจสอบล็อกการเริ่มทำงาน
ล็อกที่สคริปต์หรืองาน cron เขียนด้วย logger ให้ค้นด้วยแท็ก (ตัวระบุ) ไม่ใช่ด้วยยูนิต หลัง -t ให้เขียนชื่อเดียวกับที่ใส่ใน -t ของ logger
logger -t myapp 'journalctl test message'บนเซิร์ฟเวอร์ Debian 12 logger ไม่แสดงอะไรบนหน้าจอเลย และบรรทัดที่เขียนไว้หาเจอได้ด้วย -t myapp
journalctl -q -t myappOct 28 07:12:44 server2 myapp[347693]: journalctl test message-g จะเหลือเฉพาะบรรทัดที่ข้อความมีคำที่กำหนด ถ้าเขียนคำที่ค้นหาเป็นตัวพิมพ์เล็กทั้งหมด จะไม่แยกตัวพิมพ์ใหญ่และเล็ก
journalctl -u crond -g anacron -n 2Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron-n นับบรรทัดก่อนที่ -g จะกรอง ดังนั้นจากบรรทัด crond สองบรรทัดสุดท้ายจึงเหลือเพียงบรรทัดเดียวที่มี anacron
3️⃣ ล็อกตามช่วงเวลาและตามการบูต
--since และ --until กำหนดจุดเริ่มและจุดสิ้นสุดของช่วงเวลาที่จะแสดง ถ้ามีช่องว่างระหว่างวันที่และเวลา ให้ครอบค่าด้วยเครื่องหมายอัญประกาศเดี่ยว
| ค่า --since | ความหมายและเมื่อไรควรใช้ |
|---|---|
| '2026-10-28 06:00' | ตั้งแต่ 06:00:00 ของวันนั้น (ถ้าไม่ใส่วินาทีจะเป็น 00) เมื่อรู้เวลาที่ปัญหาเกิด |
| today | ตั้งแต่ 00:00:00 ของวันนี้ เมื่อต้องการดูเฉพาะล็อกวันนี้ |
| yesterday | ตั้งแต่ 00:00:00 ของเมื่อวานจนถึงตอนนี้ ถ้าต้องการดูเฉพาะเมื่อวานให้ใส่ --until today ด้วย |
| '-2h' | ตั้งแต่ 2 ชั่วโมงก่อน เมื่อต้องการดูสิ่งที่เพิ่งเกิด (วัดจริงด้านล่าง) |
| '1 hour ago' | ตั้งแต่ 1 ชั่วโมงก่อน ความหมายเดียวกับ -1h |
บนเซิร์ฟเวอร์ AlmaLinux ช่วง 2 ชั่วโมงล่าสุดเริ่มจากบรรทัด crond ที่เขียนเวลา 06:01 ด้านล่างคือสี่บรรทัดแรก
journalctl -u crond --since '-2h' | head -4Oct 28 06:01:01 server1 CROND[802930]: (root) CMD (run-parts /etc/cron.hourly)
Oct 28 06:01:01 server1 run-parts[802936]: (/etc/cron.hourly) starting 0anacron
Oct 28 06:01:01 server1 CROND[802926]: (root) CMDEND (run-parts /etc/cron.hourly)
Oct 28 07:01:01 server1 CROND[841388]: (root) CMD (run-parts /etc/cron.hourly)-b จะเหลือเฉพาะล็อกตั้งแต่การบูตปัจจุบัน เวลาหาสาเหตุที่เซิร์ฟเวอร์รีสตาร์ต ให้ดูรายการการบูตก่อนว่ายังมีล็อกของการบูตก่อนหน้าเหลืออยู่หรือไม่
journalctl -b -u crond -n 2Oct 28 07:01:01 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
Oct 28 07:01:01 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)--list-boots แสดงหมายเลข ID การบูต และเวลาของบรรทัดแรกและบรรทัดสุดท้าย ของการบูตแต่ละครั้งที่เหลืออยู่ใน journal
journalctl --list-bootsIDX BOOT ID FIRST ENTRY LAST ENTRY
0 4f1c2a9be0d34c7a8e6b5d20c1f3a7e9 Sat 2026-10-17 08:29:26 UTC Wed 2026-10-28 07:16:10 UTCเซิร์ฟเวอร์ AlmaLinux ไม่ได้เก็บ journal ไว้บนดิสก์ จึงมีบันทึกการบูตเพียงครั้งเดียว ดังนั้น -b -1 ที่ระบุการบูตก่อนหน้าจึงแสดงแค่ข้อความแจ้งแล้วจบไป
journalctl -b -1Specifying boot ID or boot offset has no effect, no persistent journal was found.ล็อกของการบูตก่อนหน้าอ่านด้วย -b -1 ได้เฉพาะบนเซิร์ฟเวอร์ที่เก็บ journal ไว้บนดิสก์ (/var/log/journal)
4️⃣ ล็อกข้อผิดพลาดและล็อกเคอร์เนลด้วย journalctl
-p เลือกบรรทัดตามระดับความสำคัญของล็อก ถ้าเขียนระดับเดียว จะแสดงระดับนั้นและทุกระดับที่สำคัญกว่า และเขียนระดับเป็นชื่อหรือตัวเลขก็ได้
| ระดับ | ตัวเลข | ความหมาย |
|---|---|---|
| emerg | 0 | ระบบใช้งานไม่ได้ |
| alert | 1 | ต้องแก้ไขทันที |
| crit | 2 | ข้อผิดพลาดร้ายแรง |
| err | 3 | ข้อผิดพลาด |
| warning | 4 | คำเตือน |
| notice | 5 | ปกติแต่ควรสังเกต ระดับของบรรทัดที่ logger เขียนโดยไม่ใส่ -p |
| info | 6 | ข้อมูล |
| debug | 7 | ข้อความดีบัก |
หลังจากเขียนบรรทัดระดับ err หนึ่งบรรทัดด้วย logger แล้วเลือกด้วย -p err บรรทัดระดับ notice ที่มีแท็กเดียวกัน (journalctl test message) ก็หายไป เหลือเพียงบรรทัด err
logger -t myapp -p user.err 'journalctl error test'; journalctl -q -t myapp -p errOct 28 07:12:46 server2 myapp[347704]: journalctl error testถ้าเชื่อมสองระดับด้วยจุดสองจุด จะแสดงเฉพาะช่วงนั้น เลือก warning..err แล้วจะเหลือเฉพาะระดับคำเตือนและข้อผิดพลาด
journalctl -q -t myapp -p warning..errOct 28 07:12:46 server2 myapp[347704]: journalctl error test-k จะเหลือเฉพาะข้อความเคอร์เนล และแสดงเฉพาะบรรทัดตั้งแต่การบูตปัจจุบัน
journalctl -k -n 3Oct 26 10:14:25 server1 systemd-rc-local-generator[96245]: /etc/rc.d/rc.local is not marked executable, skipping.
Oct 27 10:47:57 server1 systemd-rc-local-generator[512078]: /etc/rc.d/rc.local is not marked executable, skipping.
Oct 27 11:01:10 server1 systemd-rc-local-generator[520023]: /etc/rc.d/rc.local is not marked executable, skipping.บรรทัด -k สามบรรทัดสุดท้ายบนเซิร์ฟเวอร์ AlmaLinux เป็นบรรทัดของ systemd-rc-local-generator ทั้งหมด บรรทัดเหล่านี้เป็นข้อความที่เขียนลงบัฟเฟอร์ล็อกของเคอร์เนล จึงถูกเก็บด้วยค่า _TRANSPORT เป็น kernel และออกมาใน -k ด้วย
5️⃣ รูปแบบผลลัพธ์ของ journalctl
-o เปลี่ยนรูปแบบของแต่ละบรรทัด ค่าเริ่มต้น short เกือบเหมือนไฟล์ syslog ส่วน short-iso เปลี่ยนเวลาเป็นรูปแบบ ISO 8601 พร้อมเขตเวลา เมื่อเปลี่ยนเป็น short-iso บนเซิร์ฟเวอร์ AlmaLinux ท้ายเวลามี +0000 เพิ่มขึ้น
journalctl -u crond -n 2 -o short-iso2026-10-28T07:01:01+0000 server1 run-parts[841394]: (/etc/cron.hourly) starting 0anacron
2026-10-28T07:01:01+0000 server1 CROND[841384]: (root) CMDEND (run-parts /etc/cron.hourly)cat ตัดเวลาและชื่อโฮสต์ออกทั้งหมด แสดงแต่ข้อความ จึงใช้เมื่อส่งข้อความต่อให้ grep หรือโปรแกรมอื่น
journalctl -u crond -n 2 -o cat(/etc/cron.hourly) starting 0anacron
(root) CMDEND (run-parts /etc/cron.hourly)json และ json-pretty แสดงฟิลด์ที่เก็บใน journal เป็นชื่อและค่า เมื่อเลือกฟิลด์ด้วย --output-fields ฟิลด์เคอร์เซอร์ เวลา และ ID การบูตจะตามมาด้วยเสมอ แม้เลือกเพียงสี่ฟิลด์บนเซิร์ฟเวอร์ Debian 12 ก็ยังมี __CURSOR, _BOOT_ID และฟิลด์เวลาสองฟิลด์ออกมาด้วย
journalctl -q -t myapp -n 1 -o json-pretty --output-fields=MESSAGE,PRIORITY,SYSLOG_IDENTIFIER,_PID{
"__REALTIME_TIMESTAMP" : "1793171676664200",
"_PID" : "347877",
"SYSLOG_IDENTIFIER" : "myapp",
"MESSAGE" : "follow line 2",
"__CURSOR" : "s=2a6f0c1d9e8b47a3b5c4d3e2f1a0b9c8;i=1a2b3;b=b7e3d1a04c9f4e2a8d6c5b1f0e2a9c47;m=17cf8fe36f5;t=65ee150cf1188;x=1f2e3d4c5b6a7980",
"_BOOT_ID" : "b7e3d1a04c9f4e2a8d6c5b1f0e2a9c47",
"PRIORITY" : "5",
"__MONOTONIC_TIMESTAMP" : "1636264982261"
}6️⃣ ตำแหน่งที่เก็บ journal และการจัดการขนาด
journal อยู่ในหน่วยความจำหรือบนดิสก์ขึ้นกับค่า Storage= ใน journald.conf ค่าเริ่มต้น auto จะเก็บบนดิสก์ถ้ามีโฟลเดอร์ /var/log/journal และเก็บในหน่วยความจำ (/run/log/journal) ถ้าไม่มี
เซิร์ฟเวอร์ AlmaLinux ไม่มีโฟลเดอร์ /var/log/journal journal จึงอยู่เฉพาะใน /run/log/journal
ls -ld /var/log/journal /run/log/journalls: cannot access '/var/log/journal': No such file or directory
drwxr-sr-x+ 4 root systemd-journal 80 Oct 17 08:30 /run/log/journalเซิร์ฟเวอร์ Debian 12 มีทั้งสองโฟลเดอร์ และ journal กำลังสะสมอยู่บนดิสก์
ls -ld /var/log/journal /run/log/journaldrwxr-sr-x+ 2 root systemd-journal 40 Oct 9 08:43 /run/log/journal
drwxr-sr-x+ 4 root systemd-journal 4096 Sep 24 12:52 /var/log/journalถ้าต้องการให้ล็อกยังอยู่หลังรีบูต ให้เปลี่ยน Storage= ใน journald.conf เป็น persistent แล้วรีสตาร์ต systemd-journald ตามคู่มือทางการ โฟลเดอร์ /var/log/journal จะถูกสร้างเองเมื่อจำเป็น บทความนี้ไม่ได้เปลี่ยนการตั้งค่า
journal ที่เก็บบนดิสก์ก็เหมือนกล่องดำของเครื่องบินที่นำออกมาอ่านหลังเกิดเหตุ
--disk-usage แสดงขนาดรวมของไฟล์ journal ที่เก็บถาวรและไฟล์ที่กำลังใช้อยู่ บนบัญชีทั่วไปของเซิร์ฟเวอร์ Debian 12 เมื่อซ่อนข้อความ [Hint] ด้านบนด้วย -q ผลลัพธ์คือบรรทัดเดียว 6.6M
journalctl -q --disk-usageArchived and active journals take up 6.6M in the file system.ขนาดสูงสุดของ journal ที่เก็บบนดิสก์กำหนดด้วย SystemMaxUse= ถ้าไม่ใส่ค่า ขีดจำกัดคือร้อยละ 10 ของขนาดระบบไฟล์ (สูงสุด 4G) และใน journald.conf ของเซิร์ฟเวอร์ Debian 12 เขียนไว้ 50M
grep -v '^#' /etc/systemd/journald.conf | grep -v '^$'[Journal]
SystemMaxUse=50Mถ้าต้องการลด journal เก่าทันที ให้กำหนดขนาดที่จะเก็บด้วย --vacuum-size หรือระยะเวลาที่จะเก็บด้วย --vacuum-time ทั้งสองคำสั่งลบไฟล์ journal บทความนี้จึงไม่ได้รัน
journalctl --vacuum-size=200M--vacuum-size=200M ลบไฟล์ journal ที่เก็บถาวรโดยเริ่มจากไฟล์เก่าสุด จนขนาดรวมต่ำกว่า 200M
journalctl --vacuum-time=2weeks--vacuum-time=2weeks ลบไฟล์เก็บถาวรที่มีแต่บรรทัดเก่ากว่า 2 สัปดาห์
vacuum ลบเฉพาะไฟล์ที่เก็บถาวรและเหลือไฟล์ที่กำลังใช้อยู่ไว้ ดังนั้นแม้รันแล้ว ตัวเลข --disk-usage ก็อาจไม่ลดลงถึงขนาดที่กำหนด
ล็อกข้อความใต้ /var/log เขียนโดย rsyslogซึ่งทำงานแยกจาก journald ล็อกทั้งสองแบบจึงมีวิธีอ่านและวิธีจัดการขนาดต่างกัน
| รายการ | journald(journalctl) | rsyslog |
|---|---|---|
| วิธีอ่าน | journalctl | cat, less, grep |
| ที่เก็บ | /run/log/journal หรือ /var/log/journal | /var/log/messages (ตระกูล RHEL) หรือ /var/log/syslog (ตระกูล Debian) |
| การจัดการขนาด | SystemMaxUse และอื่น ๆ ใน journald.conf | logrotate |
7️⃣ สิทธิ์การอ่านและตัวเลือกของคำสั่ง journalctl
🔲 สิทธิ์การอ่าน
ถ้ารัน journalctl ด้วยบัญชีที่ไม่ใช่ root จะมีข้อความ [Hint] ขึ้นด้านบน และเห็นเฉพาะล็อกที่บัญชีนั้นเขียน เมื่อค้นล็อก nginx ด้วยบัญชีทั่วไปบนเซิร์ฟเวอร์ Debian 12 หลังข้อความแจ้งมีเพียง [-- No entries --]
journalctl -u nginx -n 5Hint: You are currently not seeing messages from other users and the system.
Users in groups 'adm', 'systemd-journal' can see all messages.
Pass -q to turn off this notice.
-- No entries --ตามผลของ id -nG บัญชีนี้อยู่ในกลุ่มเดียว และไม่อยู่ในกลุ่ม adm หรือ systemd-journal ที่ข้อความแจ้งพูดถึง
id -nGuserคู่มือทางการอธิบายว่าบัญชีในกลุ่ม systemd-journal, adm และ wheel อ่าน journal ได้ทั้งหมด adm และ wheel ยังมีสิทธิ์อื่นที่ดิสทริบิวชันกำหนดติดมาด้วย และ wheel มักทำงานดูแลระบบได้ด้วย สำหรับบัญชีที่อ่านล็อกอย่างเดียวจึงเหมาะกับกลุ่ม systemd-journal
usermod -aG systemd-journal userบทความนี้ไม่ได้รันคำสั่ง usermod ที่เพิ่มกลุ่ม หลังเพิ่มกลุ่มแล้วให้ล็อกอินใหม่และตรวจสอบกลุ่มด้วย id -nG บัญชีที่มีสิทธิ์ผู้ดูแลระบบรันด้วย sudo journalctl ก็เห็นล็อกทั้งหมดเช่นกัน
ข้อความ [Hint] ซ่อนได้ด้วย -q แต่ถึงใส่ -q ล็อกที่เห็นก็ยังเป็นเฉพาะบรรทัดที่บัญชีนั้นเขียน --user อ่าน journal ผู้ใช้ของบัญชีนั้น และใช้ได้เฉพาะบนเซิร์ฟเวอร์ที่เก็บ journal ไว้บนดิสก์ บนเซิร์ฟเวอร์ Debian 12 ที่เก็บ journal บนดิสก์ มีบรรทัด systemd และบรรทัด logger ของบัญชีนั้นออกมา
journalctl --user -n 3Oct 28 07:12:35 server2 systemd[347665]: Reached target default.target - Main User Target.
Oct 28 07:12:35 server2 systemd[347665]: Startup finished in 181ms.
Oct 28 07:12:44 server2 myapp[347693]: journalctl test message🔲 ตัวเลือกของคำสั่ง journalctl
📌 ตัวเลือกหลัก: ผลที่รันในบทความนี้
| ตัวเลือก | หน้าที่ | ผลที่เห็นในบทความนี้ | |
|---|---|---|---|
| -n จำนวนบรรทัด | แสดงเฉพาะไม่กี่บรรทัดสุดท้าย ไม่ใส่ตัวเลขจะได้ 10 บรรทัด | -n 3 แสดงสามบรรทัดสุดท้าย | |
| -r | กลับลำดับ ให้บรรทัดล่าสุดอยู่บนสุด | ในล็อก crond บรรทัด CMDEND ที่เขียนหลังสุดอยู่บนสุด | |
| -f | แสดงบรรทัดใหม่ที่เข้ามาหลังบรรทัดสุดท้ายต่อไปเรื่อย ๆ | สองบรรทัดที่เขียนด้วย logger ต่อท้ายด้านล่างทันที | |
| -q | ซ่อนข้อความแจ้งอย่าง [Hint] | ผลลัพธ์ --disk-usage ของบัญชีทั่วไปใน Debian 12 เหลือบรรทัดเดียว 6.6M | |
| -u ยูนิต | แสดงเฉพาะล็อกของบริการนั้น | เขียน -u สองครั้ง หลังบรรทัด crond สี่บรรทัดจะตามด้วยบรรทัด nginx reload สองบรรทัดตามลำดับเวลา | |
| -t แท็ก | แสดงเฉพาะล็อกที่มีแท็กที่ใส่ใน logger -t | -t myapp แสดงบรรทัดที่ logger เขียน | |
| -g คำ | แสดงเฉพาะบรรทัดที่ข้อความมีคำนั้น | จากบรรทัด crond สองบรรทัดสุดท้าย เหลือเพียงบรรทัดที่มี anacron | |
| --since, --until | จุดเริ่มและจุดสิ้นสุดของช่วงเวลาที่จะแสดง | --since '-2h' เริ่มจากบรรทัด crond ที่เขียนเวลา 06:01 | |
| -b | เฉพาะล็อกตั้งแต่การบูตปัจจุบัน ส่วน -b -1 คือการบูตก่อนหน้า | บนเซิร์ฟเวอร์ AlmaLinux ที่ไม่เก็บ journal บนดิสก์ -b -1 แสดงเพียงข้อความ [no persistent journal was found] | |
| --list-boots | รายการการบูตที่เหลืออยู่ใน journal | เซิร์ฟเวอร์ AlmaLinux มีบันทึกการบูตเพียงครั้งเดียว | |
| -p ระดับ | แสดงเฉพาะระดับความสำคัญนั้นและระดับที่สำคัญกว่า | -p err ตัดบรรทัด notice ออก เหลือเพียงบรรทัด err และ warning..err ก็ได้บรรทัดเดียวกัน | |
| -k | แสดงเฉพาะข้อความเคอร์เนลของการบูตปัจจุบัน | สามบรรทัดสุดท้ายเป็นบรรทัดของ systemd-rc-local-generator ทั้งหมด | |
| -o รูปแบบ | เปลี่ยนรูปแบบผลลัพธ์ของแต่ละบรรทัด | short-iso เติม +0000 ท้ายเวลา ส่วน cat เหลือแต่ข้อความ | |
| --output-fields ฟิลด์ | เลือกฟิลด์ในผลลัพธ์ json | แม้เลือกเพียงสี่ฟิลด์ก็ยังมี __CURSOR, _BOOT_ID และฟิลด์เวลาสองฟิลด์ตามมาด้วย | |
| --disk-usage | แสดงขนาดรวมที่ไฟล์ journal ใช้ | 6.6M บนบัญชีทั่วไปของเซิร์ฟเวอร์ Debian 12 | |
| --user | อ่าน journal ผู้ใช้ของบัญชีนั้น | บนเซิร์ฟเวอร์ Debian 12 มีบรรทัด systemd และบรรทัด logger ของบัญชีนั้นออกมา | |
| --utc | แสดงเวลาเป็น UTC | แม้บนเซิร์ฟเวอร์ AlmaLinux ที่ตั้งเขตเวลาแยกไว้ เวลาในล็อก crond ก็เปลี่ยนเป็น UTC | |
| ฟิลด์=ค่า | แสดงเฉพาะบรรทัดที่มีค่าฟิลด์นั้น | _PID=347704 แสดงเพียงบรรทัด err ที่ logger เขียน |
📎 ตัวเลือกอื่น: ตามคู่มือทางการ
| ตัวเลือก | หน้าที่ | |
|---|---|---|
| --no-pager | แสดงบนเทอร์มินัลทันทีโดยไม่ผ่าน less | |
| -e, --pager-end | เปิดหน้าจอ less ที่ท้าย journal ถ้าไม่ใส่ -n จะได้ 1000 บรรทัด | |
| -x, --catalog | เติมข้อความอธิบายจากแคตตาล็อกข้อความต่อท้ายบรรทัดล็อก | |
| -a, --all | แสดงฟิลด์แบบเต็ม แม้มีอักขระที่แสดงไม่ได้หรือยาวมาก | |
| -N, --fields | แสดงชื่อฟิลด์ทั้งหมดที่ใช้ใน journal | |
| -F, --field= ฟิลด์ | แสดงค่าทั้งหมดที่ฟิลด์นั้นมี | |
| -D โฟลเดอร์ | อ่าน journal ในโฟลเดอร์ที่กำหนดแทนตำแหน่งเริ่มต้น | |
| --file= ไฟล์ | อ่านไฟล์ journal ที่กำหนด เขียนได้หลายครั้ง | |
| --vacuum-size= ขนาด | ลบไฟล์ journal ที่เก็บถาวรโดยเริ่มจากไฟล์เก่าสุดจนต่ำกว่าขนาดที่กำหนด | |
| --vacuum-time= ระยะเวลา | ลบไฟล์เก็บถาวรที่มีแต่บรรทัดเก่ากว่าระยะเวลาที่กำหนด | |
| --vacuum-files= จำนวน | ลบไฟล์ journal ที่เก็บถาวร ให้เหลือเพียงจำนวนที่กำหนด | |
| --rotate | เปลี่ยนไฟล์ journal ที่ใช้อยู่เป็นไฟล์เก็บถาวรแล้วเริ่มไฟล์ใหม่ | |
| --flush | ย้าย journal จากหน่วยความจำ (/run/log/journal) ไปยังดิสก์ (/var/log/journal) เมื่อเก็บแบบ persistent |
🔲 ตัวจำลองคำสั่ง journalctl
ในตัวจำลองด้านล่าง คุณพิมพ์คำสั่งเองเพื่อตรวจดูล็อกล่าสุด ล็อกตามบริการ ช่วงเวลา ระดับความสำคัญ และรูปแบบผลลัพธ์ได้
🔢 FAQ & เนื้อหาแนะนำ








ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน