Ubuntu
在 Ubuntu 16.04 上使用 systemd 截斷/失去日誌
我正在使用 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