我在我的Ubuntu 14.04机器上的/var/log/apache2/中的apache日志文件似乎没有旋转。 我有过去的这个问题,不得不手动旋转日志文件,但它看起来仍然不是自动旋转。
我运行sudo logrotate -d /etc/logrotate.conf来尝试在cron遇到问题的情况下手动旋转日志。 如果是这样的话,我也以root身份运行这个程序来避免许可问题。 仍然没有旋转,尽pipe输出像它一样。 这里是logrotate返回的相关信息:
rotating pattern: /var/log/apache2/*.log weekly (52 rotations) empty log files are not rotated, old logs are removed switching euid to 0 and egid to 104 considering log /var/log/apache2/access.log log needs rotating considering log /var/log/apache2/error.log log needs rotating rotating log /var/log/apache2/access.log, log->rotateCount is 52 dateext suffix '-20160404' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip renaming /var/log/apache2/access.log.52.gz to /var/log/apache2/access.log.53.gz (rotatecount 52, logstart 1, i 52), renaming /var/log/apache2/access.log.51.gz to /var/log/apache2/access.log.52.gz (rotatecount 52, logstart 1, i 51), renaming /var/log/apache2/access.log.50.gz to /var/log/apache2/access.log.51.gz (rotatecount 52, logstart 1, i 50), renaming /var/log/apache2/access.log.49.gz to /var/log/apache2/access.log.50.gz (rotatecount 52, logstart 1, i 49), renaming /var/log/apache2/access.log.48.gz to /var/log/apache2/access.log.49.gz (rotatecount 52, logstart 1, i 48), renaming /var/log/apache2/access.log.47.gz to /var/log/apache2/access.log.48.gz (rotatecount 52, logstart 1, i 47), renaming /var/log/apache2/access.log.46.gz to /var/log/apache2/access.log.47.gz (rotatecount 52, logstart 1, i 46), renaming /var/log/apache2/access.log.45.gz to /var/log/apache2/access.log.46.gz (rotatecount 52, logstart 1, i 45), renaming /var/log/apache2/access.log.44.gz to /var/log/apache2/access.log.45.gz (rotatecount 52, logstart 1, i 44), renaming /var/log/apache2/access.log.43.gz to /var/log/apache2/access.log.44.gz (rotatecount 52, logstart 1, i 43), renaming /var/log/apache2/access.log.42.gz to /var/log/apache2/access.log.43.gz (rotatecount 52, logstart 1, i 42), renaming /var/log/apache2/access.log.41.gz to /var/log/apache2/access.log.42.gz (rotatecount 52, logstart 1, i 41), renaming /var/log/apache2/access.log.40.gz to /var/log/apache2/access.log.41.gz (rotatecount 52, logstart 1, i 40), renaming /var/log/apache2/access.log.39.gz to /var/log/apache2/access.log.40.gz (rotatecount 52, logstart 1, i 39), renaming /var/log/apache2/access.log.38.gz to /var/log/apache2/access.log.39.gz (rotatecount 52, logstart 1, i 38), renaming /var/log/apache2/access.log.37.gz to /var/log/apache2/access.log.38.gz (rotatecount 52, logstart 1, i 37), renaming /var/log/apache2/access.log.36.gz to /var/log/apache2/access.log.37.gz (rotatecount 52, logstart 1, i 36), renaming /var/log/apache2/access.log.35.gz to /var/log/apache2/access.log.36.gz (rotatecount 52, logstart 1, i 35), renaming /var/log/apache2/access.log.34.gz to /var/log/apache2/access.log.35.gz (rotatecount 52, logstart 1, i 34), renaming /var/log/apache2/access.log.33.gz to /var/log/apache2/access.log.34.gz (rotatecount 52, logstart 1, i 33), renaming /var/log/apache2/access.log.32.gz to /var/log/apache2/access.log.33.gz (rotatecount 52, logstart 1, i 32), renaming /var/log/apache2/access.log.31.gz to /var/log/apache2/access.log.32.gz (rotatecount 52, logstart 1, i 31), renaming /var/log/apache2/access.log.30.gz to /var/log/apache2/access.log.31.gz (rotatecount 52, logstart 1, i 30), renaming /var/log/apache2/access.log.29.gz to /var/log/apache2/access.log.30.gz (rotatecount 52, logstart 1, i 29), renaming /var/log/apache2/access.log.28.gz to /var/log/apache2/access.log.29.gz (rotatecount 52, logstart 1, i 28), renaming /var/log/apache2/access.log.27.gz to /var/log/apache2/access.log.28.gz (rotatecount 52, logstart 1, i 27), renaming /var/log/apache2/access.log.26.gz to /var/log/apache2/access.log.27.gz (rotatecount 52, logstart 1, i 26), renaming /var/log/apache2/access.log.25.gz to /var/log/apache2/access.log.26.gz (rotatecount 52, logstart 1, i 25), renaming /var/log/apache2/access.log.24.gz to /var/log/apache2/access.log.25.gz (rotatecount 52, logstart 1, i 24), renaming /var/log/apache2/access.log.23.gz to /var/log/apache2/access.log.24.gz (rotatecount 52, logstart 1, i 23), renaming /var/log/apache2/access.log.22.gz to /var/log/apache2/access.log.23.gz (rotatecount 52, logstart 1, i 22), renaming /var/log/apache2/access.log.21.gz to /var/log/apache2/access.log.22.gz (rotatecount 52, logstart 1, i 21), renaming /var/log/apache2/access.log.20.gz to /var/log/apache2/access.log.21.gz (rotatecount 52, logstart 1, i 20), renaming /var/log/apache2/access.log.19.gz to /var/log/apache2/access.log.20.gz (rotatecount 52, logstart 1, i 19), renaming /var/log/apache2/access.log.18.gz to /var/log/apache2/access.log.19.gz (rotatecount 52, logstart 1, i 18), renaming /var/log/apache2/access.log.17.gz to /var/log/apache2/access.log.18.gz (rotatecount 52, logstart 1, i 17), renaming /var/log/apache2/access.log.16.gz to /var/log/apache2/access.log.17.gz (rotatecount 52, logstart 1, i 16), renaming /var/log/apache2/access.log.15.gz to /var/log/apache2/access.log.16.gz (rotatecount 52, logstart 1, i 15), renaming /var/log/apache2/access.log.14.gz to /var/log/apache2/access.log.15.gz (rotatecount 52, logstart 1, i 14), renaming /var/log/apache2/access.log.13.gz to /var/log/apache2/access.log.14.gz (rotatecount 52, logstart 1, i 13), renaming /var/log/apache2/access.log.12.gz to /var/log/apache2/access.log.13.gz (rotatecount 52, logstart 1, i 12), renaming /var/log/apache2/access.log.11.gz to /var/log/apache2/access.log.12.gz (rotatecount 52, logstart 1, i 11), renaming /var/log/apache2/access.log.10.gz to /var/log/apache2/access.log.11.gz (rotatecount 52, logstart 1, i 10), renaming /var/log/apache2/access.log.9.gz to /var/log/apache2/access.log.10.gz (rotatecount 52, logstart 1, i 9), renaming /var/log/apache2/access.log.8.gz to /var/log/apache2/access.log.9.gz (rotatecount 52, logstart 1, i 8), renaming /var/log/apache2/access.log.7.gz to /var/log/apache2/access.log.8.gz (rotatecount 52, logstart 1, i 7), renaming /var/log/apache2/access.log.6.gz to /var/log/apache2/access.log.7.gz (rotatecount 52, logstart 1, i 6), renaming /var/log/apache2/access.log.5.gz to /var/log/apache2/access.log.6.gz (rotatecount 52, logstart 1, i 5), renaming /var/log/apache2/access.log.4.gz to /var/log/apache2/access.log.5.gz (rotatecount 52, logstart 1, i 4), renaming /var/log/apache2/access.log.3.gz to /var/log/apache2/access.log.4.gz (rotatecount 52, logstart 1, i 3), renaming /var/log/apache2/access.log.2.gz to /var/log/apache2/access.log.3.gz (rotatecount 52, logstart 1, i 2), renaming /var/log/apache2/access.log.1.gz to /var/log/apache2/access.log.2.gz (rotatecount 52, logstart 1, i 1), renaming /var/log/apache2/access.log.0.gz to /var/log/apache2/access.log.1.gz (rotatecount 52, logstart 1, i 0), rotating log /var/log/apache2/error.log, log->rotateCount is 52 dateext suffix '-20160404' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' compressing log with: /bin/gzip renaming /var/log/apache2/error.log.52.gz to /var/log/apache2/error.log.53.gz (rotatecount 52, logstart 1, i 52), renaming /var/log/apache2/error.log.51.gz to /var/log/apache2/error.log.52.gz (rotatecount 52, logstart 1, i 51), renaming /var/log/apache2/error.log.50.gz to /var/log/apache2/error.log.51.gz (rotatecount 52, logstart 1, i 50), renaming /var/log/apache2/error.log.49.gz to /var/log/apache2/error.log.50.gz (rotatecount 52, logstart 1, i 49), renaming /var/log/apache2/error.log.48.gz to /var/log/apache2/error.log.49.gz (rotatecount 52, logstart 1, i 48), renaming /var/log/apache2/error.log.47.gz to /var/log/apache2/error.log.48.gz (rotatecount 52, logstart 1, i 47), renaming /var/log/apache2/error.log.46.gz to /var/log/apache2/error.log.47.gz (rotatecount 52, logstart 1, i 46), renaming /var/log/apache2/error.log.45.gz to /var/log/apache2/error.log.46.gz (rotatecount 52, logstart 1, i 45), renaming /var/log/apache2/error.log.44.gz to /var/log/apache2/error.log.45.gz (rotatecount 52, logstart 1, i 44), renaming /var/log/apache2/error.log.43.gz to /var/log/apache2/error.log.44.gz (rotatecount 52, logstart 1, i 43), renaming /var/log/apache2/error.log.42.gz to /var/log/apache2/error.log.43.gz (rotatecount 52, logstart 1, i 42), renaming /var/log/apache2/error.log.41.gz to /var/log/apache2/error.log.42.gz (rotatecount 52, logstart 1, i 41), renaming /var/log/apache2/error.log.40.gz to /var/log/apache2/error.log.41.gz (rotatecount 52, logstart 1, i 40), renaming /var/log/apache2/error.log.39.gz to /var/log/apache2/error.log.40.gz (rotatecount 52, logstart 1, i 39), renaming /var/log/apache2/error.log.38.gz to /var/log/apache2/error.log.39.gz (rotatecount 52, logstart 1, i 38), renaming /var/log/apache2/error.log.37.gz to /var/log/apache2/error.log.38.gz (rotatecount 52, logstart 1, i 37), renaming /var/log/apache2/error.log.36.gz to /var/log/apache2/error.log.37.gz (rotatecount 52, logstart 1, i 36), renaming /var/log/apache2/error.log.35.gz to /var/log/apache2/error.log.36.gz (rotatecount 52, logstart 1, i 35), renaming /var/log/apache2/error.log.34.gz to /var/log/apache2/error.log.35.gz (rotatecount 52, logstart 1, i 34), renaming /var/log/apache2/error.log.33.gz to /var/log/apache2/error.log.34.gz (rotatecount 52, logstart 1, i 33), renaming /var/log/apache2/error.log.32.gz to /var/log/apache2/error.log.33.gz (rotatecount 52, logstart 1, i 32), renaming /var/log/apache2/error.log.31.gz to /var/log/apache2/error.log.32.gz (rotatecount 52, logstart 1, i 31), renaming /var/log/apache2/error.log.30.gz to /var/log/apache2/error.log.31.gz (rotatecount 52, logstart 1, i 30), renaming /var/log/apache2/error.log.29.gz to /var/log/apache2/error.log.30.gz (rotatecount 52, logstart 1, i 29), renaming /var/log/apache2/error.log.28.gz to /var/log/apache2/error.log.29.gz (rotatecount 52, logstart 1, i 28), renaming /var/log/apache2/error.log.27.gz to /var/log/apache2/error.log.28.gz (rotatecount 52, logstart 1, i 27), renaming /var/log/apache2/error.log.26.gz to /var/log/apache2/error.log.27.gz (rotatecount 52, logstart 1, i 26), renaming /var/log/apache2/error.log.25.gz to /var/log/apache2/error.log.26.gz (rotatecount 52, logstart 1, i 25), renaming /var/log/apache2/error.log.24.gz to /var/log/apache2/error.log.25.gz (rotatecount 52, logstart 1, i 24), renaming /var/log/apache2/error.log.23.gz to /var/log/apache2/error.log.24.gz (rotatecount 52, logstart 1, i 23), renaming /var/log/apache2/error.log.22.gz to /var/log/apache2/error.log.23.gz (rotatecount 52, logstart 1, i 22), renaming /var/log/apache2/error.log.21.gz to /var/log/apache2/error.log.22.gz (rotatecount 52, logstart 1, i 21), renaming /var/log/apache2/error.log.20.gz to /var/log/apache2/error.log.21.gz (rotatecount 52, logstart 1, i 20), renaming /var/log/apache2/error.log.19.gz to /var/log/apache2/error.log.20.gz (rotatecount 52, logstart 1, i 19), renaming /var/log/apache2/error.log.18.gz to /var/log/apache2/error.log.19.gz (rotatecount 52, logstart 1, i 18), renaming /var/log/apache2/error.log.17.gz to /var/log/apache2/error.log.18.gz (rotatecount 52, logstart 1, i 17), renaming /var/log/apache2/error.log.16.gz to /var/log/apache2/error.log.17.gz (rotatecount 52, logstart 1, i 16), renaming /var/log/apache2/error.log.15.gz to /var/log/apache2/error.log.16.gz (rotatecount 52, logstart 1, i 15), renaming /var/log/apache2/error.log.14.gz to /var/log/apache2/error.log.15.gz (rotatecount 52, logstart 1, i 14), renaming /var/log/apache2/error.log.13.gz to /var/log/apache2/error.log.14.gz (rotatecount 52, logstart 1, i 13), renaming /var/log/apache2/error.log.12.gz to /var/log/apache2/error.log.13.gz (rotatecount 52, logstart 1, i 12), renaming /var/log/apache2/error.log.11.gz to /var/log/apache2/error.log.12.gz (rotatecount 52, logstart 1, i 11), renaming /var/log/apache2/error.log.10.gz to /var/log/apache2/error.log.11.gz (rotatecount 52, logstart 1, i 10), renaming /var/log/apache2/error.log.9.gz to /var/log/apache2/error.log.10.gz (rotatecount 52, logstart 1, i 9), renaming /var/log/apache2/error.log.8.gz to /var/log/apache2/error.log.9.gz (rotatecount 52, logstart 1, i 8), renaming /var/log/apache2/error.log.7.gz to /var/log/apache2/error.log.8.gz (rotatecount 52, logstart 1, i 7), renaming /var/log/apache2/error.log.6.gz to /var/log/apache2/error.log.7.gz (rotatecount 52, logstart 1, i 6), renaming /var/log/apache2/error.log.5.gz to /var/log/apache2/error.log.6.gz (rotatecount 52, logstart 1, i 5), renaming /var/log/apache2/error.log.4.gz to /var/log/apache2/error.log.5.gz (rotatecount 52, logstart 1, i 4), renaming /var/log/apache2/error.log.3.gz to /var/log/apache2/error.log.4.gz (rotatecount 52, logstart 1, i 3), renaming /var/log/apache2/error.log.2.gz to /var/log/apache2/error.log.3.gz (rotatecount 52, logstart 1, i 2), renaming /var/log/apache2/error.log.1.gz to /var/log/apache2/error.log.2.gz (rotatecount 52, logstart 1, i 1), renaming /var/log/apache2/error.log.0.gz to /var/log/apache2/error.log.1.gz (rotatecount 52, logstart 1, i 0), rotating log /var/log/apache2/other_vhosts_access.log, log->rotateCount is 52 running prerotate script running script with arg /var/log/apache2/*.log : " if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ " renaming /var/log/apache2/access.log to /var/log/apache2/access.log.1 creating new /var/log/apache2/access.log mode = 0640 uid = 0 gid = 4 renaming /var/log/apache2/error.log to /var/log/apache2/error.log.1 creating new /var/log/apache2/error.log mode = 0640 uid = 0 gid = 4 renaming /var/log/apache2/other_vhosts_access.log to /var/log/apache2/other_vhosts_access.log.1 creating new /var/log/apache2/other_vhosts_access.log mode = 0640 uid = 0 gid = 4 running postrotate script running script with arg /var/log/apache2/*.log : " if /etc/init.d/apache2 status > /dev/null ; then \ /etc/init.d/apache2 reload > /dev/null; \ fi; " removing old log /var/log/apache2/access.log.53.gz error: error opening /var/log/apache2/access.log.53.gz: No such file or directory switching euid to 0 and egid to 0
error.log和access.log都有同样的问题。 如果您查看访问日志文件,您会注意到唯一被触及的是access.log文件,并且没有任何内容正在旋转:
-rw-r----- 1 root adm 1.1G Apr 5 00:10 access.log -rw-r----- 1 root adm 165M Dec 6 00:12 access.log.1 -rw-r----- 1 root adm 18M Oct 5 2015 access.log.10.gz -rw-r----- 1 root adm 14M Sep 27 2015 access.log.11.gz -rw-r----- 1 root adm 19M Sep 21 2015 access.log.12.gz -rw-r----- 1 root adm 16M Sep 13 2015 access.log.13.gz -rw-r----- 1 root adm 14M Sep 6 2015 access.log.14.gz -rw-r----- 1 root adm 19M Aug 31 2015 access.log.15.gz -rw-r----- 1 root adm 15M Aug 23 2015 access.log.16.gz -rw-r----- 1 root adm 20M Aug 17 2015 access.log.17.gz -rw-r----- 1 root adm 15M Aug 9 2015 access.log.18.gz -rw-r----- 1 root adm 20M Aug 3 2015 access.log.19.gz -rw-r----- 1 root adm 3.9M Jul 26 2015 access.log.20.gz -rw-r----- 1 root adm 20M Nov 30 00:12 access.log.2.gz -rw-r----- 1 root adm 15M Nov 22 00:12 access.log.3.gz -rw-r----- 1 root adm 16M Nov 16 00:12 access.log.4.gz -rw-r----- 1 root adm 15M Nov 8 00:12 access.log.5.gz -rw-r----- 1 root adm 13M Nov 1 00:12 access.log.6.gz -rw-r----- 1 root adm 18M Oct 26 00:12 access.log.7.gz -rw-r----- 1 root adm 16M Oct 18 00:12 access.log.8.gz -rw-r----- 1 root adm 14M Oct 11 00:12 access.log.9.gz
它甚至说在输出中写入:
renaming /var/log/apache2/access.log to /var/log/apache2/access.log.1 creating new /var/log/apache2/access.log mode = 0640 uid = 0 gid = 4
所以我很困惑,如果这显然是为什么什么事情没有发生? 任何人都可以确定解决这个问题?
编辑:如果它是相关的这里是我的/etc/logrotate.d/apache2文件看起来像:
/var/log/apache2/*.log { weekly missingok rotate 52 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if /etc/init.d/apache2 status > /dev/null ; then \ /etc/init.d/apache2 reload > /dev/null; \ fi; endscript prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript }
当我手动运行logrotate通过sudo logrotate /etc/logrotate.conf日志正确旋转。 它看起来像上面我有-d这是导致日志不旋转,当我手动尝试它。 这似乎是现在与cron的问题,并且logrotate可能实际上并没有在cron中运行?
看看我的cron文件夹,我在/etc/cron.daily/logrotate上有一个logrotate脚本,如下所示:
#!/bin/sh # Clean non existent log file entries from status file cd /var/lib/logrotate test -e status || touch status head -1 status > status.clean sed 's/"//g' status | while read logfile date do [ -e "$logfile" ] && echo "\"$logfile\" $date" done >> status.clean mv status.clean status test -x /usr/sbin/logrotate || exit 0 /usr/sbin/logrotate /etc/logrotate.conf
看来这应该意味着logrotate是每天运行,所以应该没有问题,它不运行?
如果根据ls命令显示的时间标记来确定日志不旋转,那么您的担心是不合理的。
当文件被重命名时,磁盘上的实际inode不会被触及,所以时间戳不会改变。 您基本上正在更改包含日志文件的目录的目录,而不是更改本书的页面。 只有新创build的文件才会获得与之关联的新时间戳记。
你可以用这个来确认
zcat access.log.2.gz | head zcat access.log.2.gz | tail
确认每个文件中第一个和最后一个日志条目的时间戳。 或者你可以告诉logrotate在每个日志文件中添加一个时间戳,而不是一个数字。
将以下行添加到/etc/logrotate.d/apache2
dateext dateformat -%Y-%m-%d-%s
虽然我以前的断言是真实的,但它取决于所使用的操作系统,文件系统和安装选项。 我刚刚检查了一些我的更新的服务器,并且时间戳符合默认的Ubuntu 14.04LTS安装。
你有足够的可用空间:
df -h /var/log
文件系统是只读的吗? 您可以尝试写入文件或检查此命令的输出。 在输出中寻找rw或ro。
mount | grep df /var/log/apache2/ | tail -1 | cut -d' ' -f1
在我的testing系统上面的命令产生这个输出。 它是()中的第一个rw,表示它的读/写,而不是只读。
/dev/xvda1 on / type ext4 (rw,noatime,errors=remount-ro,barrier=0)
gz文件的文件大小并不奇怪。 日志文件压缩得非常好,因为它们包含大量的重复数据。
在我看来,你是在一个奇怪的环境莫名其妙或logrotateconfiguration不正确 – 你可以发布你的configuration? 也就是说,你已经说过你使用了-d选项,意思是“不要做任何事情” – 没有这个选项,它是否工作? 在这种情况下,您可能会遇到与您的cron或cron工作有关的问题 – cron line / job会说些什么?
否则,我会检查的是:
-d )启用了“空运行”(即说明它会做什么,但实际上并没有这样做)?