温馨提示×

nohup日志如何设置大小

小樊
47
2026-07-21 17:32:44
栏目: 编程语言

nohup 本身不能直接设置日志大小,它只是把标准输出/错误重定向到文件。要控制日志大小,需要配合其他机制。下面按常见场景给你几种实用方案。


一、nohup 的默认行为回顾

nohup java -jar app.jar > app.log 2>&1 &
  • 日志会一直追加app.log
  • 不会自动切分、不会限制大小
  • 文件会越来越大

二、推荐方案(按使用频率)

✅ 方案 1:用 logrotate(最推荐,生产环境)

这是 Linux 下最标准、最安全 的方式。

1️⃣ 创建 logrotate 配置文件

sudo vim /etc/logrotate.d/app

示例:

/path/to/app.log {
    size 100M        # 达到 100M 就切分
    rotate 5         # 最多保留 5 个
    copytruncate     # 不重启进程,直接截断
    missingok
    notifempty
}

2️⃣ 测试是否生效

logrotate -f /etc/logrotate.d/app

✅ 优点

  • 不依赖程序
  • 稳定、安全
  • 生产环境首选

✅ 方案 2:用 cronolog(按大小或时间切分)

nohup java -jar app.jar | cronolog /path/app.%Y%m%d.log &

⚠️ 但 cronolog 对“按大小切分”支持不好,不如 logrotate。


✅ 方案 3:用 rotatelogs(Apache 工具)

nohup java -jar app.jar | rotatelogs /path/app.log 100M &

✅ 支持按大小切分
❌ 不是所有系统默认安装


✅ 方案 4:手动限制日志大小(不推荐)

nohup java -jar app.jar > app.log 2>&1 &

然后定期:

: > app.log

❌ 会丢日志
❌ 不适合生产


✅ 方案 5:程序内部日志控制(最佳实践)

如果是 Java / Python / Go 等程序:

Java(logback / log4j2)

<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
    <fileNamePattern>app.%i.log</fileNamePattern>
    <maxFileSize>100MB</maxFileSize>
    <maxHistory>5</maxHistory>
</rollingPolicy>

✅ 最干净
✅ 不依赖系统


三、总结对比

方案 是否推荐 是否自动 适合场景
logrotate ⭐⭐⭐⭐⭐ 生产环境
程序日志框架 ⭐⭐⭐⭐⭐ Java / Python
rotatelogs ⭐⭐⭐ 简单脚本
cronolog ⭐⭐ 老系统
手动 truncate 临时应急

四、一句话建议

nohup 只管启动,日志大小交给 logrotate 或程序日志框架。

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

  • 什么程序(Java / Python / Shell)
  • 操作系统(CentOS / Ubuntu / Debian)
  • 期望多大切一次、保留几天

我可以帮你写一份完全可复制的配置

0