温馨提示×

nohup日志太大怎办

小樊
82
2026-08-31 07:54:39
栏目: 编程语言

nohup 默认会把所有输出追加到 nohup.out,时间久了很容易变得非常大。下面给你几种常用且实用的解决方案,从简单到推荐依次说明。


一、最简单:重定向输出(推荐)

运行程序时,不要让它写 nohup.out。

1️⃣ 只保留错误信息

nohup python app.py >/dev/null 2>nohup.err &

2️⃣ 完全不要输出

nohup python app.py >/dev/null 2>&1 &

3️⃣ 输出到指定日志文件

nohup python app.py > app.log 2>&1 &

✅ 最佳实践:总是显式指定输出文件,不要用默认 nohup.out


二、日志太大之后:清空而不是删除

不要直接 rm nohup.out,否则进程可能仍然占用磁盘空间。

正确做法:

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

✅ 不会中断正在运行的程序
✅ 立即释放磁盘空间


三、使用日志切割(长期运行必选)

适合服务长期运行(如 Java / Python / Node 服务)

1️⃣ 使用 logrotate(强烈推荐)

示例 /etc/logrotate.d/myapp:

/path/to/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

copytruncate 非常适合 nohup 场景


四、使用 cronolog 按时间切割日志

nohup python app.py | cronolog logs/app.%Y-%m-%d.log &

五、程序本身的日志控制(从根上解决)

如果你的程序是:

Python

使用 logging,不要 print

logging.basicConfig(
    filename='app.log',
    level=logging.INFO,
    format='%(asctime)s %(message)s'
)

Java

配置 logback / log4j2 的滚动策略

✅ 根本性解决方案


六、如果已经磁盘满了怎么办?

df -h
du -sh nohup.out

紧急处理:

: > nohup.out

✅ 推荐组合方案

场景 方案
临时跑脚本 >/dev/null 2>&1
长期服务 指定 log + logrotate
已存在大日志 : > nohup.out
生产环境 程序日志框架 + 切割

如果你愿意,我可以:

  • 帮你写一个 nohup + logrotate 完整示例
  • 或直接根据你的 程序语言 / 日志路径 给你定制方案

0 踩