首页 > 解决方案 > 为什么 MongoDB 不使用 logrotate 轮换日志?

问题描述

MongoDB/logrotate 似乎无法轮换日志,我不知道为什么。这是我的配置:

在 /etc/mongod.conf 中:

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
  logRotate: reopen

processManagement:
  pidFilePath: /var/run/mongod.pid

我有一个 /etc/logrotate.d/mongodb 文件:

/var/log/mongodb/mongod.log
{
        daily
        rotate 30
        missingok
        notifempty
        compress
        delaycompress
        create 640 mongodb mongodb
        sharedscripts
        postrotate
                /bin/kill -SIGUSR1 `cat /var/run/mongod.pid 2>/dev/null` >/dev/null 2>&1
        endscript
}

我可以看到文件中的 PID 与进程匹配,但我不确定为什么日志没有轮换:

root     22938     1  1 Dec15 ?        00:21:21 /usr/bin/mongod --fork --quiet --config /etc/mongod.conf
cat /var/run/mongod.pid
22938

我的配置有问题吗?任何帮助,将不胜感激

谢谢

标签: mongodblogrotate

解决方案


我使用kill -USR1 $(/usr/sbin/pidof mongod)哪个工作正常。

$ kill -USR1 $(/usr/sbin/pidof mongod)

$ tail /var/log/mongodb/mongod.log | grep SignalHandler
{"t":{"$date":"2020-12-14T23:59:01.622+01:00"},"s":"I",  "c":"CONTROL",  "id":23377,   "ctx":"SignalHandler","msg":"Received signal","attr":{"signal":10,"error":"User defined signal 1"}}
{"t":{"$date":"2020-12-14T23:59:01.622+01:00"},"s":"I",  "c":"CONTROL",  "id":23378,   "ctx":"SignalHandler","msg":"Signal was sent by kill(2)","attr":{"pid":33744,"uid":475}}
{"t":{"$date":"2020-12-14T23:59:01.622+01:00"},"s":"I",  "c":"CONTROL",  "id":23166,   "ctx":"SignalHandler","msg":"Log rotation initiated"}

推荐阅读