很多人說 systemd 不好,它對系統的影響很大,這也是一個有爭議的話題。但你不能否認的是,它提供了一套完善的工具來管理和排除系統故障。想像一下,當你遇到一個沒有 GUI 的損壞系統時,你可能會把啟動和 GRUB 弄得一團糟。在這種情況下,你可以從一個立付Live系統啟動,掛上你的 Linux 分區,然後瀏覽 systemd 的日誌,找出問題所在。
systemd 有三個基本元件,如下所示:
systemd
:Linux 作業系統的系統和服務管理員。 systemctl
:此指令用於反觀和控制 systemd 系統和服務管理員的狀態。 systemd-analyze
:此指令提供系統啟動時的效能統計,並從系統和服務管理員中檢索其他狀態和追蹤資訊。 除了這三個服務外,systemd 還提供其他服務,如 journald、logind、networkd 等。在本指南中,我們將討論 systemd 的 journald 服務。
根據設計,systemd 提供了一個集中的方式來處理所有來自進程、應用程式等的作業系統日誌。所有這些日誌事件都由 systemd 的 journald 守護程式來處理。 journald 守護程式會收集所有來自 Linux 作業系統各處的日誌,並將其作為二進位資料儲存在檔案中。
以二進位資料集中記錄事件、系統問題的好處很多。例如,由於系統日誌是以二進位而不是文字形式儲存的,你可以以文字、JSON 物件等多種方式進行轉譯,以滿足各種需求。另外,由於日誌是依序儲存的,透過日誌的日期/時間操作,超級容易追蹤到單一事件。
請記住,journald 收集的日誌檔案數以千計,而且不斷更新每次開機、每個事件。因此,如果你有一個長期運行的 Linux 作業系統,日誌的大小應該以 GB 為單位。由於有著數以千計的日誌,最好用基本指令進行過濾,以了解更多系統問題。
journald 的設定檔存在於下列路徑中。它包含了關於如何進行日誌記錄的各種標誌。你可以看一下這個文件,並進行必要的修改。但我建議不要修改這個文件,除非你知道自己在做什麼。
/etc/systemd/journald.conf
journald 以二進位格式儲存日誌。它們被保存在這個路徑下的一個目錄中:
/var/log/journal
例如,在下面的路徑中,有一個目錄包含了迄今為止的所有系統日誌。
journalctl log file path
不要使用 cat
指令,也不要使用 nano
或 #1
來開啟這些檔案。它們(是二進制的),無法正常顯示。
查看journald 日誌的基本指令是:
journalctl
#journalctl
#该命令提供了所有应用程序和进程的日志条目,包括错误、警告等。它显示的列表中,最旧的日志在顶部,当前的日志在底部。你需要不断按回车键来逐行滚动浏览。你也可以使用 PAGE UP
和 PAGE DOWN
键来滚动。按 q
键可以退出这个视图。
默认情况下,journalctl
以当前系统时区显示日志的时间。然而,你可以很容易地在命令中提供时区,将同一日志转换为不同的时区。例如,要以 UTC 查看日志,请使用以下命令:
journalctl --utc
journalctl --utc
系统产生的日志有不同的优先级。有些日志可能是可以忽略的警告,有些可能是重要的错误。你可能想只看错误,不看警告。这也可以用下面的命令来实现。
要查看紧急系统信息,请使用:
journalctl -p 0
journalctl -p 0
错误代码:
0: 紧急情况 1: 警报 2: 危急 3: 错误 4: 警告 5: 通知 6: 信息 7:调试
当你指定错误代码时,它显示该等级及更高的所有信息。例如,如果你指定下面的命令,它会显示所有优先级为 2、1 和 0 的信息:
journalctl -p 2
当你运行 journalctl
命令时,它会显示当前启动的信息,即你正在运行的会话中的信息。但也可以查看过去的启动信息。
在每次重启时,日志都会持续更新。journald 会记录不同启动时的日志。要查看不同启动时的日志,请使用以下命令。
journalctl --list-boots
journalctl list-boots
要查看一个特定的启动号码,你可以选择第一个启动跟踪号码或启动 ID,如下所示。
journalctl -b -45
journalctl -b 8bab42c7e82440f886a3f041a7c95b98
journalctl -b 45
你也可以使用 -x
选项,在显示屏上添加 systemd 错误信息的解释。在某些情况下,这是个救命稻草。
journalctl -xb -p 3
journalctl -xb
journalctl
功能强大,可以在命令中提供类似英语的参数,用于时间和日期操作。
你可以使用 --since
选项与 yesterday
、today
、tomorrow
或 now
组合。
下面是一些不同命令的例子。你可以根据你的需要修改它们。它们是不言自明的。以下命令中的日期、时间格式为 "YYYY-MM-DD HH:MM:SS"
journalctl --since "2020-12-04 06:00:00"
journalctl --since "2020-12-03" --until "2020-12-05 03:00:00"
journalctl --since yesterday
journalctl --since 09:00 --until "1 hour ago"
journalctl --since 09:00 --until
你也可以将上述内容与错误级别开关结合起来。
Linux 内核信息也可以从日志中提取出来。要查看当前启动时的内核信息,请使用以下命令:
journalctl -k
你可以从 journald 日志中过滤出某个 systemd 服务单元的特定日志。例如,如果要查看 NetworkManager 服务的日志,请使用下面的命令。
journalctl -u NetworkManager.service
journalctl NetworkManager service
如果你不知道服务名称,可以使用下面的命令来列出系统中的 systemd 服务。
systemctl list-units --type=service
如果你正在分析服务器日志,在多个用户登录的情况下,这个命令很有帮助。你可以先用下面的命令从用户名中找出用户的 ID。例如,要找出用户 debugpoint
的 ID:
id -u debugpoint
然后使用 _UID
选项指定该 ID 与来查看该用户产生的日志。
journalctl _UID=1000 --since today
journalctl _UID
同样地,使用 _GID
选项也可以查到用户组的情况。
你也可以查看某个特定程序或可执行文件的日志。例如,如果你想找出 gnome-shell
的信息,你可以运行以下命令。
journalctl /usr/bin/gnome-shell --since today
journalctl gnome-shell
希望本指南能幫助你使用 #journalctl
查看分析 Linux 桌面或伺服器上的 systemd 日誌,排除故障。如果你知道如何使用這些命令,systemd 日誌管理的功能非常強大,它能讓你在調試時的生活變得輕鬆一些。現在所有主流的 Linux 發行版都使用 systemd。 Ubuntu、Debian、Fedora、Arch 它們都使用 systemd 作為其預設的作業系統元件。如果你想了解不使用 systemd 的 Linux發行版,你可能想看看 MX-Linux、Gentoo、Slackware、Void Linux。
以上是如何使用 journalctl 檢視和分析 systemd 日誌(附實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!