nohup 默认会把所有输出追加到 nohup.out,时间久了很容易变得非常大。下面给你几种常用且实用的解决方案,从简单到推荐依次说明。
运行程序时,不要让它写 nohup.out。
nohup python app.py >/dev/null 2>nohup.err &
nohup python app.py >/dev/null 2>&1 &
nohup python app.py > app.log 2>&1 &
✅ 最佳实践:总是显式指定输出文件,不要用默认 nohup.out
不要直接 rm nohup.out,否则进程可能仍然占用磁盘空间。
: > nohup.out
# 或
truncate -s 0 nohup.out
✅ 不会中断正在运行的程序
✅ 立即释放磁盘空间
适合服务长期运行(如 Java / Python / Node 服务)
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 &
如果你的程序是:
使用 logging,不要 print
logging.basicConfig(
filename='app.log',
level=logging.INFO,
format='%(asctime)s %(message)s'
)
配置 logback / log4j2 的滚动策略
✅ 根本性解决方案
df -h
du -sh nohup.out
紧急处理:
: > nohup.out
| 场景 | 方案 |
|---|---|
| 临时跑脚本 | >/dev/null 2>&1 |
| 长期服务 | 指定 log + logrotate |
| 已存在大日志 | : > nohup.out |
| 生产环境 | 程序日志框架 + 切割 |
如果你愿意,我可以: