温馨提示×

nohup日志过大如何压缩

小樊
43
2026-09-12 10:07:33
栏目: 编程语言

nohup 默认会把输出写到 nohup.out,时间一长会非常大。常见处理思路有:压缩旧日志、滚动切割、重定向控制输出。下面按实用程度给你几种方案。


一、已存在的 nohup.out 太大:手动压缩

1. 直接 gzip 压缩(最安全)

gzip nohup.out

生成 nohup.out.gz,原文件消失。

如果程序还在写这个文件,不要直接 rm,否则进程还会持有文件句柄,磁盘不会释放。

2. 清空但不删除文件(推荐线上用)

: > nohup.out
# 或
truncate -s 0 nohup.out

文件还在,大小变 0,进程继续写。


二、使用 logrotate(最规范)

适合长期运行的服务。

示例 /etc/logrotate.d/myapp

/path/to/nohup.out {
    daily
    rotate 7
    compress
    copytruncate
    missingok
    notifempty
}

关键点:

  • copytruncate:复制后清空原文件(不重启进程
  • compress:自动 gzip
  • rotate 7:保留 7 份

测试:

logrotate -d /etc/logrotate.d/myapp

三、用 rotatelogs(Apache 工具)

启动时就做切割:

nohup ./app | rotatelogs -n 7 nohup.%Y%m%d.log 86400 &

每天一个新文件,保留 7 个。


四、避免 nohup.out 无限增长(推荐)

1. 重定向到指定日志

nohup ./app > app.log 2>&1 &

2. 配合 split 控制大小

nohup ./app | split -b 100m - app.log.

五、如果程序已经写了很大的 nohup.out

safest 操作顺序:

cp nohup.out nohup.out.bak
gzip nohup.out.bak
: > nohup.out

总结建议

  • 临时gziptruncate
  • 长期logrotate + copytruncate
  • 新项目:一开始就重定向日志

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

  • 用的什么程序(Java / Python / C++)
  • 是否在容器中
  • 是否不能重启进程

我可以给你更精确的配置。

0