本文目录导读:

在自动化脚本或配置管理(如 Ansible、Shell 脚本)中配置 Logrotate,通常有两种方式:
直接生成配置文件(推荐)
在脚本中调用 logrotate 命令
下面分别介绍这两种方式,并给出常见的配置模板。
通过脚本生成 Logrotate 配置文件
这是最规范的做法,Logrotate 的配置放在 /etc/logrotate.d/ 目录下,每个应用或服务一个配置文件。
Shell 脚本示例
假设你有一个应用日志路径为 /var/log/myapp/*.log,需要按天轮转,保留 7 天,并压缩。
#!/bin/bash
# 日志轮转配置文件路径
CONFIG_FILE="/etc/logrotate.d/myapp"
# 写入配置
cat > $CONFIG_FILE << 'EOF'
/var/log/myapp/*.log {
daily # 每天轮转一次
missingok # 如果日志不存在不报错
rotate 7 # 保留 7 个旧日志
compress # 压缩旧日志(默认 gzip)
delaycompress # 延迟压缩,最近一个轮转的不压,方便查看
notifempty # 日志为空则不轮转
create 0640 www-data adm # 创建新日志文件的权限、用户、组
sharedscripts # 多个日志文件匹配时,只执行一次 postrotate
postrotate
# 通知应用重新打开日志文件(以 Nginx 为例)
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
EOF
echo "Logrotate 配置已生成: $CONFIG_FILE"
关键点说明:
daily/weekly/monthly:轮转频率rotate N:保留旧日志个数compress / delaycompress:压缩设置create 权限 用户 组:轮转后新日志的文件权限postrotate ... endscript:轮转后执行的命令(如重载应用)sharedscripts:多个日志匹配时,postrotate只执行一次
在脚本中直接调用 logrotate
如果你不想生成配置文件,或者需要临时强制轮转,可以在脚本中使用 logrotate 命令。
#!/bin/bash
LOG_FILE="/var/log/myapp/access.log"
CONFIG_CONTENT=$(cat << 'EOF'
/var/log/myapp/access.log {
daily
rotate 3
compress
postrotate
# 某些应用需要信号来重新打开日志
systemctl reload nginx 2>/dev/null || true
endscript
}
EOF
)
# 方式 A: 使用临时文件
echo "$CONFIG_CONTENT" > /tmp/myapp_logrotate.conf
logrotate -f /tmp/myapp_logrotate.conf # -f 强制轮转
rm /tmp/myapp_logrotate.conf
# 方式 B: 使用管道(部分系统不支持)
# echo "$CONFIG_CONTENT" | logrotate -f -
注意:
-f:强制执行轮转(即使不满足条件也轮转)-v:详细输出,方便调试-s:指定状态文件(默认/var/lib/logrotate/logrotate.status)
常用 Logrotate 配置模板
通用应用日志(如 Java/Python 应用)
/var/log/myapp/*.log {
daily
rotate 30
compress
delaycompress
dateext # 日志文件名带日期
missingok
notifempty
create 0640 appuser appgroup
sharedscripts
postrotate
# 根据应用实际重载机制调整
supervisorctl signal HUP myapp 2>/dev/null || true
endscript
}
Nginx 日志
/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
Docker 容器日志
/var/lib/docker/containers/*/*.log {
rotate 3
daily
compress
missingok
delaycompress
copytruncate # 拷贝并截断原日志,无需信号通知
notifempty
}
注意: copytruncate 可能会丢失少量日志行,但对 Docker 这种无法发送重载信号的场景很有效。
集成到 Ansible/Puppet/Salt 脚本
Ansible 示例
- name: 配置 logrotate for myapp
ansible.builtin.copy:
dest: /etc/logrotate.d/myapp
content: |
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
postrotate
systemctl reload nginx || true
endscript
}
owner: root
group: root
mode: '0644'
验证配置是否生效
# 测试配置文件语法(不会实际轮转) logrotate -d /etc/logrotate.d/myapp # 强制运行一次轮转 logrotate -f /etc/logrotate.d/myapp # 查看当前状态 cat /var/lib/logrotate/logrotate.status | grep myapp
| 场景 | 推荐做法 |
|---|---|
| 新部署应用时 | 在安装脚本中生成 /etc/logrotate.d/ 配置文件 |
| 需要临时轮转 | 使用 logrotate -f 命令 |
| 配置管理工具 | 使用模板模块(Ansible copy/template) |
| Docker 容器日志 | 使用 copytruncate 模式 |
关键点:
- 配置文件放在
/etc/logrotate.d/,系统 cron 会自动执行。 - 主配置文件
/etc/logrotate.conf中include /etc/logrotate.d确保子配置生效。 postrotate中必须发送正确的信号或命令通知应用重载日志文件。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播