vault backup: 2025-07-22 22:14:08
Affected files: Too many files to list
This commit is contained in:
129
21.01. OS/21.01. Linux/journalctl.md
Normal file
129
21.01. OS/21.01. Linux/journalctl.md
Normal file
@@ -0,0 +1,129 @@
|
||||
## 看log
|
||||
Raspberry Pi 4沒有`/var/log/syslog`,要使用`journalctl`。
|
||||
```bash
|
||||
journalctl
|
||||
```
|
||||
Or
|
||||
```bash
|
||||
journalctl | grep SOMETHING
|
||||
```
|
||||
|
||||
### 看系統訊息
|
||||
```bash
|
||||
journalctl -p 0
|
||||
```
|
||||
|
||||
#### Error code意思
|
||||
```
|
||||
0: 紧急情况
|
||||
1: 警报
|
||||
2: 危急
|
||||
3: 错误
|
||||
4: 警告
|
||||
5: 通知
|
||||
6: 信息
|
||||
7:调试
|
||||
```
|
||||
|
||||
### 看開機log
|
||||
```bash
|
||||
journalctl --list-boots
|
||||
```
|
||||
|
||||
- 第一個數字顯示的是journald 的唯一的啟動追蹤號碼,你可以在下一個命令中使用它來分析該特定的啟動。
|
||||
- 第二個數字是啟動ID,你也可以在指令中指定。
|
||||
- 接下來的兩個日期、時間組合是儲存在對應文件中的日誌的時間。如果你想找出某個特定日期、時間的日誌或錯誤,這就非常方便了。
|
||||
|
||||
例如:
|
||||
```bash
|
||||
journalctl -b -45
|
||||
```
|
||||
Or
|
||||
```bash
|
||||
journalctl -b 8bab42c7e82440f886a3f041a7c95b98
|
||||
```
|
||||
|
||||
也可以使用 `-x` 選項,在顯示器上加入systemd 錯誤訊息的解釋。在某些情況下,這是個救命稻草。例:
|
||||
```bash
|
||||
journalctl -xb -p 3
|
||||
```
|
||||
|
||||
### 看某一特定時間、日期的日誌記錄
|
||||
使用 `--since` 選項與 `yesterday`、`today`、`tomorrow` 或 `now` 組合。
|
||||
|
||||
以下是一些不同指令的範例。你可以根據你的需求修改它們。它們是不言自明的。以下命令中的日期、時間格式為 `"YYYY-MM-DD HH:MM:SS"`
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
|
||||
### 看內核特定的記錄
|
||||
```bash
|
||||
journalctl -k
|
||||
```
|
||||
|
||||
### 過濾出某個systemd 服務單元的特定日誌
|
||||
例如,如果要查看 NetworkManager 服務的日誌
|
||||
```bash
|
||||
journalctl -u NetworkManager.service
|
||||
```
|
||||
|
||||
如果不知道service name,看[[systemd#列出系統中的 systemd service]]
|
||||
|
||||
### 查看使用者、群組的日誌
|
||||
```bash
|
||||
id -u debugpoint # 先找出使用者的uid
|
||||
journalctl _UID=1000 --since today
|
||||
```
|
||||
|
||||
### 查看可執行檔的日誌
|
||||
```bash
|
||||
journalctl /usr/bin/gnome-shell --since today
|
||||
```
|
||||
|
||||
### 看log佔用的磁碟空間
|
||||
```bash
|
||||
journalctl --disk-usage
|
||||
```
|
||||
|
||||
### 清除日誌
|
||||
#### 手動清除
|
||||
```bash
|
||||
sudo journalctl --flush --rotate # 將所有日誌歸檔
|
||||
sudo journalctl --vacuum-time=7d # 只保留最近7天的日誌
|
||||
sudo journalctl --vacuum-time=1s # 只保留最近1秒的日誌
|
||||
```
|
||||
或者設定日誌的大小
|
||||
```bash
|
||||
sudo journalctl --vacuum-size=400M # 保留最後400M
|
||||
```
|
||||
|
||||
#### 自動清除
|
||||
修改`/etc/systemd/journald.conf`,裡面有下面幾個設定項:
|
||||
- `SystemMaxUse`: 指定日志在持久性存储中可使用的最大磁盘空间。例:`SystemMaxUse=500M`
|
||||
- `SystemKeepFree`: 指定在将日志条目添加到持久性存储时,日志应留出的空间量。例:`SystemKeepFree=100M`
|
||||
- `SystemMaxFileSize`: 控制单个日志文件在被轮换之前在持久性存储中可以增长到多大。例:`SystemMaxFileSize=100M`
|
||||
- `RuntimeMaxUse`: 指定在易失性存储中可以使用的最大磁盘空间(在 /run 文件系统内)。例:`RuntimeMaxUse=100M`
|
||||
- `RuntimeKeepFree`: 指定将数据写入易失性存储(在 /run 文件系统内)时为其他用途预留的空间数量。例:`RuntimeMaxUse=100M`
|
||||
- `RuntimeMaxFileSize`: 指定单个日志文件在被轮换之前在易失性存储(在 /run 文件系统内)所能占用的空间量。例:`RuntimeMaxFileSize=200M`
|
||||
|
||||
修改後記得重啟 `journalctl`:
|
||||
![[journalctl#重啟日誌]]
|
||||
|
||||
也請記得[[journalctl#確認日誌的完整性]]
|
||||
|
||||
### 確認日誌的完整性
|
||||
```bash
|
||||
journalctl --verify
|
||||
```
|
||||
|
||||
### 重啟日誌
|
||||
若是有改變設定,記得重啟以讓變更生效:
|
||||
```shell
|
||||
sudo systemctl restart systemd-journald
|
||||
```
|
||||
|
||||
### 參考
|
||||
- [系統運作|如何使用journalctl 檢視和分析systemd 日誌(附實例)](https://linux.cn/article-15544-1.html)
|
||||
Reference in New Issue
Block a user