温馨提示×

centos nohup日志怎么分割

小樊
37
2026-09-15 08:02:04
栏目: 智能运维

在 CentOS 上,用 nohup 启动的程序通常会把输出重定向到 nohup.out,但随着时间推移这个文件会越来越大。下面给你几种常用且实用的日志分割方案,从简单到专业。


一、最简单:启动时就“不要”只写 nohup.out(推荐)

不要直接:

nohup java -jar app.jar &

而是重定向到按日期命名的文件:

nohup java -jar app.jar > app_$(date +%Y%m%d).log 2>&1 &

缺点:不会自动滚动,需要配合定时任务。


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

logrotate 是 CentOS 官方日志管理工具,非常适合 nohup.out

示例:分割 nohup.out

  1. 创建配置:
sudo vim /etc/logrotate.d/myapp
  1. 写入内容:
/opt/app/nohup.out {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
}

参数说明

  • daily:每天分割
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate关键点,不重启进程就能截断日志(适合 nohup)
  1. 测试:
logrotate -d /etc/logrotate.d/myapp
  1. 强制执行:
logrotate -f /etc/logrotate.d/myapp

这是生产环境最稳妥方案


三、用 cron + 脚本手动切割(轻量)

如果你不想用 logrotate:

0 0 * * * mv /opt/app/nohup.out /opt/app/nohup_$(date +%F).log

⚠️ 问题:nohup 仍持有旧文件句柄,日志可能继续写旧文件
✅ 解决:用 copytruncate 思路或重启服务


四、程序自身支持日志轮转(最好)

如果你控制代码:

  • Java → logback / log4j2(RollingFile)
  • Python → logging.handlers.TimedRotatingFileHandler
  • Go → lumberjack

这样 根本不需要 nohup.out


五、常见错误 ❌

❌ 直接 rm nohup.out
→ 磁盘不释放,进程还在写

❌ 只 > /dev/null
→ 出问题时没法排查


总结建议

场景 推荐方案
生产环境 ✅ logrotate
简单脚本 重定向 + cron
可控程序 内部日志轮转
临时跑 nohup.out 可接受

如果你愿意,可以告诉我:

  • 什么程序(Java / Python / Shell)
  • 是否 7×24 运行
  • 是否在 systemd 环境

我可以直接帮你写一份可用的配置。

0