我有这个logrotateconfiguration,我在Ubuntu 10.04上运行。
/var/log/mysql/mysql-slow.log { daily rotate 3 compress notifempty missingok create 660 mysql adm postrotate if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin ping &>/dev/null then /usr/bin/mysqladmin flush-logs fi endscript
}
我把它放在/etc/logrotate.d昨天和今天日志不旋转。
以下是我所做的事情:
当我这样做:
$ logrotate -d -f mysql-slow reading config file mysql-slow reading config info for /var/log/mysql/mysql-slow.log Handling 1 logs rotating pattern: /var/log/mysql/mysql-slow.log forced from command line (3 rotations) empty log files are not rotated, old logs are removed considering log /var/log/mysql/mysql-slow.log log needs rotating rotating log /var/log/mysql/mysql-slow.log, log->rotateCount is 3 dateext suffix '-20120329' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' renaming /var/log/mysql/mysql-slow.log.3.gz to /var/log/mysql/mysql-slow.log.4.gz (rotatecount 3, logstart 1, i 3), renaming /var/log/mysql/mysql-slow.log.2.gz to /var/log/mysql/mysql-slow.log.3.gz (rotatecount 3, logstart 1, i 2), renaming /var/log/mysql/mysql-slow.log.1.gz to /var/log/mysql/mysql-slow.log.2.gz (rotatecount 3, logstart 1, i 1), renaming /var/log/mysql/mysql-slow.log.0.gz to /var/log/mysql/mysql-slow.log.1.gz (rotatecount 3, logstart 1, i 0), renaming /var/log/mysql/mysql-slow.log to /var/log/mysql/mysql-slow.log.1 creating new /var/log/mysql/mysql-slow.log mode = 0660 uid = 20004 gid = 4 running postrotate script running script (multiple) with arg /var/log/mysql/mysql-slow.log : " if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin &>/dev/null then /usr/bin/mysqladmin flush-logs fi " compressing log with: /bin/gzip removing old log /var/log/mysql/mysql-slow.log.4.gz
一个常见的问题是,当你第一次设置每日logrotate.d条目时,它不会在第一天旋转。 当您使用基于时间的轮换(每日/每周/每月)时,logrotate将最后一个date的date标记涂抹在/var/lib/logrotate/status
(或RHEL系统上的/var/lib/logrotate.status
) 。
潦草的date成为未来logrotate
将用来比较“日常”旋转的参考date。 由于默认的cron作业每天运行,这通常只是日常工作中的一个问题。
你可以通过两种方式避免这个问题;
运行sudo logrotate -f /etc/logrotate.d/<my rotate job>
编辑/var/lib/logrotate/status
并手动添加行:
"/var/log/my_special.log" 2013-4-8
根据以下Slicehost文章:
了解Ubuntu上的logrotate – 第2部分
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2
… /var/lib/logrotate/status
文件“ 存储有关它最后一次旋转每个日志文件的信息。 ” logrotate手册页说这被称为“状态文件”。
在ServerFault中还有另外一个讨论可能也是有用的:
logrotate如何处理“每日”?
在这个讨论中,“MadHatter”对于下面的“状态”(状态)文件说:
“每个文件都有一行,这是上次轮换的date;如果您运行logrotate的date是给定的文件旋转到位,给定从当前date到文件中的date之间的天数(每天1次,每周7次等),文件将被旋转。
我希望这有帮助。
如果mysqladmin
需要用户名或密码,则不会从/root/.my.cnf
configuration中读取它,而无需修改。
尝试将您的输出输出到logging器,以查看发生了什么。
postrotate # just if mysqld is really running if test -x /usr/bin/mysqladmin && \ /usr/bin/mysqladmin ping &>/dev/null then env HOME=/root/ /usr/bin/mysqladmin flush-logs 2>&1 | logger else logger "mysqladmin ping failed so not rotating mysql logs" fi endscript
MySQL不会在旋转后将错误logging到新文件中?