温馨提示×

如何分割nohup日志内容

小樊
46
2026-10-26 23:53:13
栏目: 编程语言

在使用 nohup 运行程序时,日志通常会被重定向到一个文件,例如:

nohup python app.py > app.log 2>&1 &

随着时间推移,app.log 会越来越大。下面介绍几种常见的“分割 nohup 日志内容”的方法,从简单到规范。


一、手动分割(适合临时处理)

1. 按时间或行数切割

# 按前 10000 行分割
split -l 10000 app.log app.log.part_

# 按大小分割(每 100M)
split -b 100M app.log app.log.part_

生成文件如:

app.log.part_aa
app.log.part_ab

2. 按日期提取

grep "2026-01-21" app.log > app_20260121.log

二、使用 logrotate(推荐,服务器标准做法)

logrotate 可以自动分割、压缩、清理 nohup 日志。

示例配置

新建 /etc/logrotate.d/app:

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

说明:

  • daily:每天分割
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:复制后清空原文件(适合 nohup)

✅ 关键点:nohup 程序不重启也能用 copytruncate


三、使用 cron + 脚本(轻量方案)

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

注意:

  • 某些程序需要信号(如 kill -USR1)重新打开日志
  • nohup 通常用 copytruncate 更安全

四、从一开始就避免大日志(最佳实践)

1. 使用日志框架

  • Python:logging
  • Java:logback / log4j2
  • Go:zap / logrus

支持:

  • 按大小滚动
  • 按时间滚动
  • 自动删除

2. 输出到 stdout,由系统管理

nohup python app.py &

再用 systemd 或 supervisor 管理日志。


五、快速选择建议

场景 推荐方式
临时分析 split / grep
生产服务器 logrotate
长期项目 日志框架
容器环境 stdout + 日志驱动

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

  • 使用的语言(Python / Java / Shell)
  • 是否可重启程序
  • 日志大小级别(MB / GB)

我可以直接给你可复制的配置或脚本。

0 踩