温馨提示×

如何设置nohup日志大小

小樊
44
2026-08-05 09:17:46
栏目: 编程语言

nohup 本身没有“日志大小限制”参数,它只是把标准输出/错误重定向到文件(默认 nohup.out)。
要控制日志大小,需要借助其他机制。下面按常见场景给你几种可行方案,从简单到规范。


一、最常用:用 logrotate 管理 nohup 日志(推荐 ✅)

这是生产环境最推荐的方式。

1️⃣ 假设你的程序是这样启动的

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

2️⃣ 配置 logrotate

创建配置文件:

sudo vim /etc/logrotate.d/app

内容示例:

/path/to/app.log {
    size 100M        # 日志超过 100M 就轮转
    rotate 5         # 保留 5 个备份
    missingok
    notifempty
    copytruncate    # 不重启进程,直接截断原文件
    compress
}

3️⃣ 测试

logrotate -f /etc/logrotate.d/app

✅ 优点

  • 不依赖程序本身
  • 自动切割、压缩、清理
  • 适合长期运行服务

二、启动时限制日志大小(不推荐,但可用)

方法 1:用 truncate + cron

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

定时任务:

0 3 * * * truncate -s 0 /path/to/app.log

⚠️ 风险:可能截断正在写入的数据


三、用 split 限制单个日志大小(适合日志分析)

nohup java -jar app.jar | split -b 100M - app.log.

生成:

app.log.aa
app.log.ab
app.log.ac

❌ 缺点:

  • 不利于实时查看
  • 不利于程序错误定位

四、从程序层面控制(最优雅 ✅✅)

如果你的程序是 Java / Python / Node,建议直接配置日志框架。

Java 示例(logback)

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

然后:

nohup java -jar app.jar > /dev/null 2>&1 &

✅ 这是最佳实践


五、不推荐但常见:直接限制 nohup.out

nohup ./app > app.log 2>&1 &

然后配合 logrotate 管理 app.log


总结对比

方案 是否推荐 说明
logrotate ✅✅✅ 生产环境首选
程序日志框架 ✅✅✅ 最优雅
split ⚠️ 仅临时
truncate 有风险
nohup 自带 不支持

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

  • 你的程序语言(Java / Python / Shell)
  • 是服务器长期运行还是一次性任务
  • 日志增长速度(MB/天)

我可以帮你给出最合适的配置方案

0