---
# System prepended metadata

title: logrotate
tags: [Linux, logrotate]

---

# logrotate 

logrotate 是 linux 自带的对日志进行截断(轮转)，压缩，以及删除的工具。

logrotate 的配置文件是 `/etc/logrotate.conf`，通常不需要对他进行修改，自定义的配置文件放在 `/etc/logrotate.d/` 目录下。

### 配置
一个典型的配置如下
```conf
/var/log/a.log {
    monthly
    rotate 5
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
    postrotate
        /usr/bin/killall -HUP rsyslogd
    endscript
}
```

第一行表示针对 `/var/log/a.log` 文件进行操作。
- `monthly`: 表示日志文件按月轮转，其他可用值为 `yearly`，`weekly`，`daily`。
- `rotate 5`: 表示最多存储 5 个归档的日志文件，当出现第六个就会把时间最早的删除。
- `compress`: 在轮转任务完成后，压缩已归档的文件。默认使用 gzip，
- `delaycompress`: 与 compress 一起使用，表示不要压缩最近的一次归档。
- `missingok`: 在日志轮转期间，任何错误将被忽略，比如文件无法找到。
- `notifempty`: 如果日志文件为空，轮转将不会执行。
- `create 644 bot bot`: 以指定的权限创建新的日志文件，同时 logrotate 也会重命名原始日志文件。
- `postrotate/endscript`: 在所有其他指令完成后，postrotate, endscript 里的命令将被执行。

### 其他指令
`size=50M`: 当文件大小到 50M 时执行轮转。  
`dateext`: 旧文件以日志命名。  
`su bot bot`: 表示使用 bot 组 bot 用户执行轮转。  

### 手动执行 logrotate
有的时候为了测试轮转效果，可以手动执行一次 `logrotate`。
```bash
# 执行所有的配置
logrotate /etc/logrotate.conf
# 指定某一个配置
logrotate /etc/logrotate.d/a.conf
```

另外 `logrotate` 还有一个 `-d` 参数，可以以预演的方式执行 `logrotate` 并输出结果。这样可以进行验证而不会真实的去操作日志文件。

另外 `-f` 可以在轮转条件不满足的时候强制进行轮转。
`-v` 则提供更详细的输出。

### 其他
logrotate 自身的日志在 `/var/lib/logrotate/status` 目录。

logrotate 的 cron 配置文件在 ` /etc/cron.daily/logrotate`

###### tags: `Linux` `logrotate`
