温馨提示×

centos nohup日志为何占用大

小樊
45
2026-09-24 10:34:19
栏目: 智能运维

在 CentOS 上,nohup 日志占用空间大通常不是 nohup 本身的问题,而是由程序输出行为 + 日志重定向方式 + 磁盘/日志管理策略共同导致的。下面分点说明常见原因和解决办法。


一、nohup 日志为什么会越来越大

1. 标准输出 / 标准错误一直往 nohup.out 写

nohup java -jar app.jar &

默认会生成:

nohup.out

只要程序:

  • 不断打印日志(INFO / DEBUG)
  • 不轮转
  • 不清理

文件就会无限增长。

✅ 这是最常见原因


2. 标准错误(stderr)也被写入

很多程序:

  • stdout 有日志
  • stderr 也有异常/堆栈
nohup app > nohup.out 2>&1 &

2>&1 会把 stderr 也写进同一文件,体积翻倍。


3. 日志级别过高

如:

  • DEBUG
  • TRACE
  • 访问日志全开

生产环境非常容易爆盘。


4. 程序异常疯狂打印

例如:

  • 死循环
  • 网络重连失败
  • 定时任务异常

会出现:

每秒几 MB 日志

5. 没有日志轮转(logrotate)

nohup.out 默认不会自动切割,不像:

  • /var/log/messages
  • /var/log/nginx

6. 多个进程写同一个 nohup.out

例如:

  • 启动多次
  • 脚本里重复 nohup

多个 PID 同时写,文件迅速变大。


二、如何排查

1. 看文件大小

ls -lh nohup.out
du -sh nohup.out

2. 看哪个进程在写

lsof | grep nohup.out

3. 实时看内容

tail -f nohup.out

4. 看磁盘占用

df -h
du -sh /*

三、正确做法(推荐)

✅ 方案 1:重定向到应用日志(最推荐)

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

并且程序内部用:

  • logback
  • log4j2
  • 自带日志轮转

✅ 方案 2:直接丢弃无用输出

nohup app > /dev/null 2>&1 &

✅ 方案 3:使用 logrotate(强烈推荐)

示例 /etc/logrotate.d/app:

/opt/app/nohup.out {
    size 100M
    rotate 5
    copytruncate
    missingok
    notifempty
}

⚠️ copytruncate 对 nohup 很关键


✅ 方案 4:用 systemd(CentOS 7+ 推荐)

[Service]
ExecStart=/opt/app/app.jar
StandardOutput=journal
StandardError=journal

查看:

journalctl -u app

四、紧急处理方法

# 不中断程序清空
: > nohup.out
# 或
truncate -s 0 nohup.out

⚠️ 不要直接 rm nohup.out,可能导致:

  • 磁盘不释放
  • 程序继续写已删除文件

五、总结一句话

nohup 日志大,不是 nohup 的锅,而是“程序一直写 + 不轮转 + 不清理”

如果你愿意,可以把:

  • CentOS 版本
  • 启动命令
  • 程序类型(Java / Python / Node)

发我,我可以给你定制一套最优方案。

0 踩