温馨提示×

如何分割nohup日志文件呢

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

nohup 默认会把输出追加到 nohup.out,时间久了会非常大。下面按推荐程度给你几种实用的分割/管理方案。


✅ 推荐方案一:用 logrotate(最正规、最推荐)

这是生产环境的标准做法。

示例:每天或按大小切割 nohup.out

  1. 创建 logrotate 配置文件:
sudo vim /etc/logrotate.d/myapp
  1. 写入内容(按实际情况修改路径):
/path/to/nohup.out {
    daily
    rotate 7
    size 100M
    copytruncate
    missingok
    notifempty
    compress
}

参数说明

参数 含义
daily 每天切割
size 100M 超过 100M 就切割
rotate 7 保留 7 个备份
copytruncate 复制后清空原文件(不重启进程)
compress 压缩旧日志

优点

  • 不需要重启程序
  • 自动、安全、可控

✅ 推荐方案二:启动时就避免 nohup.out

1️⃣ 直接重定向到按日期命名的日志

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

⚠️ 缺点:不会自动切割,第二天要重启。


2️⃣ 使用 cronolog(按天自动切)

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

安装:

yum install cronolog
# 或
apt install cronolog

✅ 优点:自动按天生成日志
❌ 缺点:需要额外工具


✅ 方案三:手动切割(临时救急)

如果你已经有一个巨大的 nohup.out

cp nohup.out nohup.out.bak
> nohup.out

或:

cat nohup.out > nohup_$(date +%F).log
> nohup.out

⚠️ 注意:

  • > nohup.outrm 安全
  • 不建议频繁手动操作

✅ 方案四:用 systemd(强烈推荐新项目)

如果你用的是 Linux 服务器,不要用 nohup,用 systemd:

[Service]
StandardOutput=append:/var/log/myapp.log
StandardError=append:/var/log/myapp.log

再配合 logrotate


✅ 总结建议

场景 推荐方案
生产环境 ✅ logrotate
临时脚本 重定向
长期运行服务 systemd + logrotate
紧急处理 手动切割

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

  • Java / Python / Shell
  • 日志增长速度?
  • 是否需要 按天 / 按大小 / 按小时

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

0