Ubuntu

在 Ubuntu 16.04 上使用 systemd 截斷/失去日誌

  • June 21, 2016

我正在使用 Ubuntu 16.04 伺服器,創建了一個基本的 nodejs 腳本並將其打包在一個簡單的 systemd 服務中。

api.service 的內容位於/lib/systemd/system/api.service

[Unit]
Description=api
After=network.target

[Service]
WorkingDirectory=/var/node/api
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=5s
StartLimitInterval=60s
StartLimitBurst=5

[Install]
WantedBy=multi-user.target

當我用 觀看日誌時journalctl -u api.service -n -f,似乎我的一些腳本輸出行沒有被記錄,特別是當腳本在短時間內產生大量日誌行時。

例如,如果 nodejs 腳本只是一個輸出前 3000 個整數的簡單 for 循環,那麼日誌中似乎只記錄了大約 2500 行。

index.js 的內容位於/var/node/api/index.js

for (var i = 1; i <= 3000; i++) {
   console.log(i);
}
console.log("end of script");

使用 查看日誌時journalctl -u api.service -n -f,我只得到大約 2500 行:

May 04 13:52:15 test systemd[1]: Stopping api...
May 04 13:52:15 test systemd[1]: Stopped api.
May 04 13:52:15 test systemd[1]: Started api.
May 04 13:52:15 test node[20993]: 1
May 04 13:52:15 test node[20993]: 2
May 04 13:52:15 test node[20993]: 3
May 04 13:52:15 test node[20993]: 4
May 04 13:52:15 test node[20993]: 5
May 04 13:52:15 test node[20993]: 6
...
...
...
May 04 13:52:16 test node[20993]: 2497
May 04 13:52:16 test node[20993]: 2498
May 04 13:52:16 test node[20993]: 2499
May 04 13:52:16 test node[20993]: 2500
May 04 13:52:16 test node[20993]: 2501

還值得注意的是,即使我使用 setTimeout 延遲它,也不會輸出“腳本結尾”。

知道這裡出了什麼問題嗎?

這可能是因為 journalctl conf 中的速率限制。檢查RateLimitInterval並歸檔RateLimitBurst/etc/systemd/journald.conf

引用自:https://serverfault.com/questions/774809