温馨提示×

centos nohup日志如何分割存

小樊
40
2026-09-03 03:39:27
栏目: 智能运维

在 CentOS 上,用 nohup 启动程序通常会把输出重定向到 nohup.out,时间久了会非常大。下面给你几种常用且实用的日志分割/滚动方案,从简单到专业。


一、最简单:用 >> + 定时切分(不推荐长期使用)

nohup java -jar app.jar >> app.log 2>&1 &

然后每天用 cron 备份:

0 0 * * * mv /path/app.log /path/app.log.$(date +\%Y\%m\%d)

⚠️ 问题:程序仍写旧文件,需要重启或信号切换,不推荐生产


二、推荐:用 logrotate(CentOS 自带,最常用)

1. 示例:分割 nohup 日志

假设日志是:

/nohup/app.log

2. 创建 logrotate 配置

vi /etc/logrotate.d/app

内容示例:

/nohup/app.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    copytruncate
}

3. 关键参数说明

参数 作用
daily 每天分割
rotate 7 保留 7 份
compress 压缩旧日志
copytruncate 复制后清空原文件(nohup 不重启也能用
notifempty 空文件不分割

4. 手动测试

logrotate -f /etc/logrotate.d/app

这是 CentOS 上最推荐方案


三、更专业:用 cronolog(按时间自动切)

1. 安装

yum install cronolog -y

2. 启动方式

nohup java -jar app.jar 2>&1 | cronolog /logs/app.%Y%m%d.log &

日志会自动按天生成:

app.20260121.log
app.20260122.log

✅ 不需要 logrotate
❌ 老项目,维护较少


四、程序本身支持日志框架(最佳)

如果是 Java / Python:

  • Java:Logback / Log4j2(RollingFile)
  • Python:logging + TimedRotatingFileHandler

✅ 不依赖系统
✅ 最稳定


五、总结推荐

场景 推荐
简单脚本 logrotate + copytruncate
长期运行服务 程序内日志切割
不想配置 cronolog

如果你愿意,可以把启动命令程序类型(Java/Python/Shell)发我,我可以帮你写一份可直接用的配置

0