温馨提示×

如何分割nohup日志量

小樊
45
2026-10-06 10:50:39
栏目: 编程语言

在使用 nohup 运行程序时,日志通常会不断写入同一个文件(如 nohup.out),时间久了会导致:

  • 单个文件过大,难以查看
  • 不便排查问题
  • 磁盘空间被占满

下面按常见程度介绍几种「分割 nohup 日志量」的方法。


一、最简单:用 logrotate(推荐,系统级)

logrotate 是 Linux 自带的日志管理工具,适合长期运行的服务。

示例配置

新建 /etc/logrotate.d/myapp:

/path/to/nohup.out {
    size 100M
    rotate 5
    copytruncate
    compress
    missingok
    notifempty
}

说明:

  • size 100M:超过 100M 就切割
  • rotate 5:保留 5 个旧日志
  • copytruncate:拷贝后清空原文件(不中断进程)
  • compress:压缩旧日志

✅ 优点:自动、稳定、不影响进程
❌ 缺点:需要 root 或 sudo


二、最常用:nohup + 管道 + 日志切割工具

1️⃣ 用 split 手动切割(简单但不智能)

nohup your_command >> nohup.log 2>&1 &

然后定期:

split -b 50M nohup.log nohup_part_

⚠️ 这种方式会中断写入,不推荐生产环境。


2️⃣ 用 cronolog(经典方案)

nohup your_command 2>&1 | cronolog /path/log/%Y%m%d.log &

每天生成一个日志文件:

/path/log/20260121.log

✅ 自动按时间分割
❌ 需要安装 cronolog


3️⃣ 用 multilog(daemontools)

适合服务化程序:

nohup your_command | multilog s1000000 n5 ./log &
  • s1000000:单文件最大 1MB
  • n5:保留 5 个

三、程序内部解决(最优雅)

Java

java -Djava.util.logging.config.file=logging.properties ...

Python

使用 logging + RotatingFileHandler:

from logging.handlers import RotatingFileHandler

handler = RotatingFileHandler(
    "app.log", maxBytes=10*1024*1024, backupCount=5
)

✅ 不依赖外部工具
✅ 最稳定


四、临时清理(不推荐但应急)

: > nohup.out

或

cat /dev/null > nohup.out

⚠️ 会丢失日志


推荐方案总结

场景 推荐方式
服务器长期运行 logrotate
简单脚本 cronolog
自研程序 程序内日志切割
临时测试 不管,定期清空

如果你能告诉我:

  • 用的什么语言 / 命令
  • 是否在服务器上
  • 是否允许安装工具

我可以给你一个可直接复制用的方案。

0 踩