在使用 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 + 管道 + 日志切割工具split 手动切割(简单但不智能)nohup your_command >> nohup.log 2>&1 &
然后定期:
split -b 50M nohup.log nohup_part_
⚠️ 这种方式会中断写入,不推荐生产环境。
cronolog(经典方案)nohup your_command 2>&1 | cronolog /path/log/%Y%m%d.log &
每天生成一个日志文件:
/path/log/20260121.log
✅ 自动按时间分割
❌ 需要安装 cronolog
multilog(daemontools)适合服务化程序:
nohup your_command | multilog s1000000 n5 ./log &
s1000000:单文件最大 1MBn5:保留 5 个java -Djava.util.logging.config.file=logging.properties ...
使用 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 |
| 自研程序 | 程序内日志切割 |
| 临时测试 | 不管,定期清空 |
如果你能告诉我:
我可以给你一个可直接复制用的方案。