为什么 logrotate 复制了一个文件但没有创建一个新文件?

问题描述

我在 Nginx docker 容器中运行 logrotate。

FROM Nginx:1.16.1

RUN apt-get update && apt-get -y install cron logrotate
ADD logrotate /etc/logrotate.d/Nginx

CMD ["cron","-f"]

日志旋转文件

/var/log/Nginx/access.json {
        missingok
        rotate 7
        notifempty
        sharedscripts
        postrotate
                if [ -f /var/run/Nginx.pid ]; then
                        kill -USR1 `cat /var/run/Nginx.pid`
                fi
        endscript

首先,/var/log/Nginx/下的日志文件是:

  • access.json
  • 访问日志
  • 错误日志

运行后旋转命令

logrotate -v /etc/logrotate.d/Nginx

文件变成:

  • access.json.1
  • 访问日志
  • 错误日志

access.json 消失了。详细的是:

reading config file /etc/logrotate.d/Nginx
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file,size 64 entries
Creating new state

Handling 1 logs

rotating pattern: /var/log/Nginx/access.json  100 bytes (7 rotations)
empty log files are not rotated,old logs are removed
considering log /var/log/Nginx/access.json
  Now: 2020-12-23 10:33
  Last rotated at 2020-12-23 10:32
  log needs rotating
rotating log /var/log/Nginx/access.json,log->rotateCount is 7
dateext suffix '-20201223'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/Nginx/access.json.7 to /var/log/Nginx/access.json.8 (rotatecount 7,logstart 1,i 7),old log /var/log/Nginx/access.json.7 does not exist
renaming /var/log/Nginx/access.json.6 to /var/log/Nginx/access.json.7 (rotatecount 7,i 6),old log /var/log/Nginx/access.json.6 does not exist
renaming /var/log/Nginx/access.json.5 to /var/log/Nginx/access.json.6 (rotatecount 7,i 5),old log /var/log/Nginx/access.json.5 does not exist
renaming /var/log/Nginx/access.json.4 to /var/log/Nginx/access.json.5 (rotatecount 7,i 4),old log /var/log/Nginx/access.json.4 does not exist
renaming /var/log/Nginx/access.json.3 to /var/log/Nginx/access.json.4 (rotatecount 7,i 3),old log /var/log/Nginx/access.json.3 does not exist
renaming /var/log/Nginx/access.json.2 to /var/log/Nginx/access.json.3 (rotatecount 7,i 2),renaming /var/log/Nginx/access.json.1 to /var/log/Nginx/access.json.2 (rotatecount 7,i 1),renaming /var/log/Nginx/access.json.0 to /var/log/Nginx/access.json.1 (rotatecount 7,i 0),old log /var/log/Nginx/access.json.0 does not exist
log /var/log/Nginx/access.json.8 doesn't exist -- won't try to dispose of it
renaming /var/log/Nginx/access.json to /var/log/Nginx/access.json.1
running postrotate script
logrotate_script: 3: kill: No such process

error: error running shared postrotate script for '/var/log/Nginx/access.json '

我创建了一个文件 /var/run/Nginx.pid 并手动在其中设置了一个数字以进行测试,但仍然无法正常工作。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)