温馨提示×

centos nohup日志为何变大

小樊
49
2026-10-03 05:51:30
栏目: 智能运维

在 CentOS(以及大多数 Linux 系统)上,nohup 本身不会主动让日志变大,它只是把程序的标准输出/错误重定向到文件(默认是 nohup.out)。日志变大的根本原因通常是程序在不断往里写内容。

下面按常见原因逐个说明:


1. 程序持续输出日志(最常见)

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

如果程序:

  • 不断打印日志(INFO / DEBUG)
  • 有定时任务、心跳、轮询
  • 出现异常疯狂打印 stacktrace

→ nohup.out 会快速增大。

✅ 解决:

  • 用日志框架(logback / log4j)控制级别
  • 不要直接 > nohup.out,改用滚动日志

2. 标准输出和错误都重定向到一起

2>&1

如果程序错误很多,stderr 也会写进同一个文件,体积翻倍。

✅ 建议:

nohup app > app.log 2> app.err &

3. 日志没有轮转(log rotate)

nohup.out 默认不会自动切割,只会一直追加。

✅ 解决方式:

  • 用 logrotate
  • 或启动时用 >> + 定时清理
  • 或程序自身做 rolling log

4. 程序被重启多次,但日志没清

每次启动:

nohup xxx > nohup.out &

如果 nohup.out 没删,旧日志还在,新日志继续追加。

✅ 建议:

> nohup.out
nohup xxx >> nohup.out &

5. 有死循环或异常刷屏

例如:

  • while(true) 打印
  • 网络断开不断重试
  • 空指针异常循环抛出

→ 日志指数级增长

✅ 检查:

tail -f nohup.out

6. 多个进程写同一个日志

如果:

  • 多次 nohup 同一命令
  • 或脚本里重复启动

→ 多进程并发写,日志暴涨

✅ 检查进程:

ps -ef | grep 程序名

7. nohup.out 被“假删除”但仍在写

如果你:

rm nohup.out

但进程没重启,文件描述符还在,磁盘占用不会释放,日志仍在写。

✅ 查看:

lsof | grep nohup.out

✅ 正确清空:

: > nohup.out

推荐的标准做法(CentOS)

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

并配置:

/etc/logrotate.d/app

如果你愿意,可以把:

  • 启动命令
  • nohup.out 大小
  • tail 出来的几行日志

发出来,我可以直接帮你判断是哪一种原因。

0 踩