nohup 本身不会自动清理日志,它只是把标准输出/错误重定向到 nohup.out。要实现自动清理,常见做法有以下几种,按“推荐程度”从高到低说明。
不要让 nohup.out 无限增长
nohup java -jar app.jar > logs/app-$(date +%Y%m%d).log 2>&1 &
logrotate(生产环境首选 ✅)这是最规范、最安全的方式。
/etc/logrotate.d/myapp/path/to/logs/app.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
✅ 效果:
适合临时任务或测试环境。
: > nohup.out
crontab -e
每 7 天清空一次:
0 2 */7 * * : > /path/to/nohup.out
或只保留 100MB:
0 2 * * * size=$(stat -c%s nohup.out); [ $size -gt 104857600 ] && : > nohup.out
⚠️ 缺点:
如果程序支持日志框架(logback / log4j / Python logging):
nohup ./app > /dev/null 2>&1 &
✅ 优点:
rm nohup.out
❌ 会导致:
| 方式 | 适合场景 | 推荐度 |
|---|---|---|
| logrotate | 生产环境 | ⭐⭐⭐⭐⭐ |
| 日志重定向 + 日期 | 小项目 | ⭐⭐⭐⭐ |
| crontab 清空 | 临时任务 | ⭐⭐⭐ |
| rm nohup.out | ❌ | ⭐ |
如果你愿意,可以告诉我:
我可以帮你定制一套最合适的自动清理方案。