温馨提示×

nohup日志如何自动清理

小樊
43
2026-07-21 17:58:40
栏目: 编程语言

nohup 本身不会自动清理日志,它只是把标准输出/错误重定向到 nohup.out。要实现自动清理,常见做法有以下几种,按“推荐程度”从高到低说明。


✅ 推荐方案一:启动时直接控制日志(最干净)

不要让 nohup.out 无限增长

1️⃣ 重定向到带日期的日志文件

nohup java -jar app.jar > logs/app-$(date +%Y%m%d).log 2>&1 &

2️⃣ 使用 logrotate(生产环境首选 ✅)

这是最规范、最安全的方式。

示例:/etc/logrotate.d/myapp

/path/to/logs/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

✅ 效果:

  • 每天一个日志
  • 保留 7 天
  • 自动压缩
  • 不中断程序

✅ 推荐方案二:定时清理 nohup.out(简单粗暴)

适合临时任务或测试环境。

1️⃣ 清空 nohup.out(不删除文件)

: > nohup.out

2️⃣ 使用 crontab 定时清理

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 只负责启动
nohup ./app > /dev/null 2>&1 &

✅ 优点:

  • 不依赖外部工具
  • 可控性最强

❌ 不推荐方案

rm nohup.out

❌ 会导致:

  • 程序继续写“已删除文件”
  • 磁盘空间不释放
  • 只能重启进程解决

✅ 总结对比

方式 适合场景 推荐度
logrotate 生产环境 ⭐⭐⭐⭐⭐
日志重定向 + 日期 小项目 ⭐⭐⭐⭐
crontab 清空 临时任务 ⭐⭐⭐
rm nohup.out

如果你愿意,可以告诉我:

  • 运行的是什么程序(Java / Python / Shell)
  • 是否在服务器上长期运行
  • 日志增长速度

我可以帮你定制一套最合适的自动清理方案

0