# logrotate (opens new window)
logrotate是一个日志文件管理工具。 它能够自动分割,压缩,删除和邮件发送日志文件。 Linux系统一般默认会安装logrotate工具。
logrotate是基于CRON来执行定期任务,配置位于/etc/cron.daily/logrotate。
# 默认的配置文件位置
- /etc/logrotate.conf, 此文件是主配置文件
- /etc/logrotate.d/, 此目录下的所有文件,在/etc/logrotate.conf主文件会全被引入
# 手动执行命令验证配置文件是否有效
logrotate命令加-f参数来执行指定的logrotate配置文件
/usr/sbin/logrotate -f /etc/logrotate.d/standalone1-mosquitto #standalone1-mosquitto新加的配置文件,一般建议按服务名称命名执行前可通过-d参数来debug配置文件
/usr/sbin/logrotate -d -f /etc/logrotate.d/standalone1-mosquitto #standalone1-mosquitto新加的配置文件,一般建议按服务名称命名
# 常用参数说明
compress 通过gzip压缩转储的日志
nocompress 不做gzip压缩处理
create mode owner group 轮转时指定创建新文件的属性,如create 0777 nobody nobody
delaycompress 和compress 一起使用时,转存的日志文件等到下一次转存时才压缩
missingok 如果日志丢失,不报错继续滚动下一个日志
ifempty 即使日志文件为空文件也做轮转,这个是logrotate的默认选项。
notifempty 当日志文件为空时,不进行轮转
mail xxx@xxx.com 把转存的日志文件发送到指定的地址
nomail 转存时不发送日志文件
olddir directory 指定存放轮转日志文件的目录,必须和当前日志文件在同一个文件系统
noolddir 转存后的日志文件和当前日志文件放在同一个目录下
dateext 使用当前日期作为命名格式
sharedscripts 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有此设置,则每个日志轮转后都会执行一次脚本
postrotate/endscript 在logrotate转存之后配置执行的指令,例如重启 (kill -HUP) 某个服务!shell命令需要包含在postrotate与endscript之间
例子(/etc/logrotate.d/standalone1-mosquitto):
/data/tct-compose/standalone1/mosquitto/log/mosquitto.log {
su jkins devops #切换到jkins用户devops组
daily #每天转存日志
create 0777 jkins devops #轮转时指定新创建的文件属性
rotate 7 #保留7个日志文件
missingok #如果日志丢失,不报错继续滚动下一个日志
notifempty #当日志文件为空时,不进行轮转
dateext #使用当前日期作为命名格式
sharedscripts #运行postrotate脚本
postrotate #转后重启服务
if [ -f /var/run/mosquitto.pid ]; then
kill -USR1 `cat /var/run/mosquitto.pid`
fi
endscript
}
# 容器工具
blacklabelops/logrotate (opens new window)可以用来对docker容器的标准输出日志文件进行rotate
docker run -d \
-v /var/lib/docker/containers:/var/lib/docker/containers \
-v /var/log/docker:/var/log/docker \
-e "LOGS_DIRECTORIES=/var/lib/docker/containers /var/log/docker" \
blacklabelops/logrotate