在Ubuntu 16.04上使用systemd截断/丢失日志

我使用的是Ubuntu 16.04服务器,已经创build了一个基本的nodejs脚本,并将其打包在一个简单的systemd服务中。

/lib/systemd/system/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看日志时,看起来我的一些脚本输出行没有被logging,特别是当脚本在很短的时间内产生大量的日志行时。

例如,如果nodejs脚本只是输出前3000个整数的一个简单的for循环,那么只有大约2500行似乎被logging在日志中。

/var/node/api/index.js处的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中的速率限制。 检查/etc/systemd/journald.conf文件中的RateLimitIntervalRateLimitBurst