温馨提示×

centos nohup日志为何占满磁盘

小樊
42
2026-09-09 05:32:45
栏目: 智能运维

在 CentOS(以及大多数 Linux 系统)上,nohup 日志占满磁盘是一个很常见的问题,根本原因通常不是 nohup 本身,而是使用方式 + 日志写入机制导致的。

下面分层说明原因和解决办法。


一、为什么 nohup 日志会占满磁盘?

1️⃣ 默认日志输出到 nohup.out

当你执行:

nohup command &

如果没有重定向输出,所有:

  • 标准输出(stdout)
  • 标准错误(stderr)

都会写入当前目录的:

nohup.out

⚠️ 特点:

  • 不会自动切割
  • 不会自动清理
  • 程序一直运行 → 日志无限增长

2️⃣ 程序输出量非常大

以下情况极易爆盘:

  • 高频日志(每秒几百上千行)
  • debug 级别日志
  • 异常循环打印错误
  • 后台服务(Java / Python / Node / Go)

例如:

Exception in thread ...
Exception in thread ...
Exception in thread ...

3️⃣ 日志文件被删除但进程仍持有

这是最容易误解的情况

rm -f nohup.out

但磁盘空间没释放

原因:

  • 文件被删
  • 但进程仍然打开文件描述符
  • 磁盘空间由进程占用

查看方式:

lsof | grep deleted

4️⃣ 多个进程写同一个 nohup.out

例如:

nohup python app.py &
nohup python app.py &

多个进程同时写,日志量翻倍。


5️⃣ 日志没有轮转(logrotate 没接)

nohup.out 不在 logrotate 管理范围内,除非你手动配置。


二、如何确认是不是 nohup 日志占满?

查看磁盘占用

df -h

找出大文件

du -sh /*
du -sh /home/*

找 nohup.out

find / -name nohup.out 2>/dev/null

三、正确的 nohup 使用方式(重点)

✅ 正确做法 1:重定向日志

nohup command > app.log 2>&1 &

或更安全:

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

✅ 正确做法 2:使用日志切割

方法 1:logrotate(推荐)

示例 /etc/logrotate.d/myapp

/var/log/myapp.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

⚠️ copytruncate 对 nohup 程序很关键


✅ 正确做法 3:用 systemd(CentOS 7+ 推荐)

systemctl start myapp
journalctl -u myapp

日志自动管理,不会爆盘。


✅ 正确做法 4:限制日志大小

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

或只保留错误:

nohup command >/dev/null 2>error.log &

四、已经占满磁盘怎么办?

1️⃣ 不要直接 rm

先确认:

lsof | grep nohup.out

2️⃣ 安全清空(推荐)

: > nohup.out

truncate -s 0 nohup.out

✅ 不中断进程,立即释放空间


3️⃣ 重启程序(彻底解决)

kill -9 PID
nohup command > app.log 2>&1 &

五、总结一句话

nohup 本身不会占满磁盘,问题出在“日志没有重定向 + 没有轮转 + 程序持续输出”。

如果你愿意,可以把:

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

发给我,我可以帮你写一套不会爆盘的启动方案

0