在 Debian(以及其它 Linux 系统)上,nohup 本身不会自动分割日志,它只是把输出重定向到文件(通常是 nohup.out)。当日志越来越大时,需要借助日志分割/轮转机制来处理。
下面给你几种常用且实用的方法,从简单到专业。
logrotate(标准做法)logrotate 是 Debian 自带的日志管理工具,最适合长期运行的服务。
nohup.out假设你的程序是:
nohup python app.py > nohup.out 2>&1 &
sudo vim /etc/logrotate.d/myapp
内容示例:
/opt/myapp/nohup.out {
size 100M
rotate 5
copytruncate
compress
missingok
notifempty
}
size 100M:超过 100M 就分割rotate 5:保留 5 个旧日志copytruncate:复制后清空原文件(不中断程序)compress:压缩旧日志missingok:文件不存在也不报错sudo logrotate -d /etc/logrotate.d/myapp
✅ 这是生产环境最推荐的方式
split 分割(不推荐长期使用)nohup python app.py | split -b 100m - nohup.log. &
会生成:
nohup.log.aa
nohup.log.ab
❌ 缺点:
cronolog(老方案)nohup python app.py | cronolog /opt/myapp/log/%Y%m%d.log &
按天生成日志:
/opt/myapp/log/20260121.log
⚠️ 现在用得少了,不如 logrotate
最推荐的方式其实是:不要让 nohup 管日志
例如 Python:
import logging
logging.basicConfig(
filename='/opt/myapp/app.log',
rotation=...
)
或用 supervisor / systemd
# 清空 nohup.out(不删文件)
: > nohup.out
或
cp nohup.out nohup_$(date +%F).log
> nohup.out
| 场景 | 方案 |
|---|---|
| 生产服务 | ✅ logrotate |
| 临时脚本 | split / 手动清理 |
| 新项目 | 程序自写日志 + systemd |
| 长期运行 | ❌ 不要只靠 nohup.out |
如果你愿意,可以告诉我:
我可以给你定制一份 logrotate 配置。