温馨提示×

linux nohup日志怎么分割

小樊
39
2026-09-09 12:20:47
栏目: 智能运维

在 Linux 下使用 nohup 运行程序时,日志默认会写入 nohup.out(或你重定向的文件),但它不会自动分割,时间久了会非常大。常见做法有下面几种:


一、启动时直接按大小/时间分割(推荐)

1. 使用 logrotate(最标准)

logrotate 是 Linux 自带日志管理工具,适合长期运行服务。

示例:

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

新建配置 /etc/logrotate.d/app

/var/log/app/app.log {
    size 100M
    rotate 5
    copytruncate
    missingok
    notifempty
    compress
}

说明:

  • size 100M:超过 100M 就分割
  • rotate 5:保留 5 个旧日志
  • copytruncate:复制后清空原文件(不重启进程
  • compress:压缩旧日志

✅ 适合 nohup 程序不能重启的场景


2. 使用 split(简单粗暴)

nohup your_app | split -b 100m - /var/log/app/app.log.

生成:

app.log.aa
app.log.ab

缺点:

  • 不能按时间
  • 文件名不直观
  • 不支持自动清理

二、用日志工具代替 nohup 重定向

3. 使用 multilog(daemontools)

nohup sh -c 'your_app | multilog s1000000000 n5 /var/log/app' &
  • s1000000000:每个日志 1GB
  • n5:保留 5 份

4. 使用 svlogd(runit)

类似 multilog,适合服务化管理


三、程序层自己分割(最好)

如果程序支持:

  • log4j / logback(Java)
  • logging / loguru(Python)
  • zap / logrus(Go)

最推荐,不用外部工具


四、简单但不推荐的写法

nohup your_app >> nohup.out

❌ 日志无限增长,迟早出问题


总结建议

场景 推荐方式
长期运行 logrotate
临时脚本 split
服务型程序 程序内日志切割
不能重启进程 copytruncate

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

  • 用什么语言/程序
  • 是否允许重启
  • 日志大概多大

我可以给你精准配置示例

0