温馨提示×

nohup日志能否自动轮转

小樊
51
2026-09-06 14:36:54
栏目: 编程语言

可以,但 nohup 本身不会自动轮转日志,需要配合其他机制来实现。


一、nohup 的日志机制

常见用法:

nohup your_command >> app.log 2>&1 &
  • nohup 只是忽略挂断信号
  • >> 是 shell 重定向
  • 日志会一直追加,不会切割、不会清理

所以:
✅ nohup 能写日志
❌ nohup 不能自动轮转


二、实现日志自动轮转的常见方案

✅ 方案 1:使用 logrotate(推荐,最常用)

适用于服务器环境(Linux)

示例配置 /etc/logrotate.d/myapp:

/var/log/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

关键参数说明:

  • copytruncate:复制后清空原文件(对 nohup 友好,不需要重启进程)
  • 否则需要让程序支持信号重新打开日志

✅ 方案 2:用 logrotate + 信号(更标准)

如果程序支持:

kill -USR1 pid

可在 logrotate 中写:

postrotate
    kill -USR1 $(cat /var/run/myapp.pid)
endscript

✅ 方案 3:在程序内部做日志轮转(最佳实践)

如果是你自己的程序,建议:

  • Java → Logback / Log4j2
  • Python → logging + RotatingFileHandler
  • Go → zap / logrotate

这样不依赖外部工具,最稳定


✅ 方案 4:用 cron + split(简单粗暴)

0 0 * * * mv app.log app.log.$(date +%F)

⚠ 缺点:

  • 需要程序支持重新打开日志
  • 不适合高并发服务

三、推荐组合(实用)

场景 推荐
简单脚本 nohup + logrotate(copytruncate)
生产服务 程序内日志轮转
老程序无法改 logrotate + copytruncate

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

  • 什么语言/程序
  • 是否在服务器上
  • 是否允许重启进程

我可以帮你写完整的 logrotate 配置或示例。

0 踩