温馨提示×

怎样分割nohup日志文件

小樊
42
2026-10-09 10:36:18
栏目: 编程语言

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

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

随着时间推移,app.log 会越来越大。下面介绍几种分割 nohup 日志文件的常见方法。


一、使用 logrotate(推荐,最规范)

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

示例配置

创建 /etc/logrotate.d/app:

/var/www/app/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

关键参数说明

  • daily:每天切割
  • rotate 7:保留 7 个备份
  • compress:压缩旧日志
  • copytruncate:不重启进程,直接截断原日志(适合 nohup)

✅ copytruncate 对 nohup 非常重要,因为它不会关闭文件描述符


二、使用 split 手动分割(适合一次性处理)

如果日志已经很大:

split -b 100M app.log app.log.

会生成:

app.log.aa
app.log.ab

查看时可结合 less 或 grep。


三、使用 cron + mv + kill -USR1(需程序支持)

部分程序(如 Nginx)支持信号切割:

mv app.log app.log.$(date +%Y%m%d)
kill -USR1 <pid>

⚠️ nohup 启动的普通程序通常不支持 USR1,不推荐通用场景。


四、运行时就避免大日志(最佳实践)

1. 使用 rotating 日志(Python 示例)

from logging.handlers import RotatingFileHandler

handler = RotatingFileHandler("app.log", maxBytes=10*1024*1024, backupCount=5)

2. 用 nohup + logrotate 组合

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

再由 logrotate 管理。


五、简单清理(不推荐长期使用)

> app.log

或

truncate -s 0 app.log

⚠️ 会清空当前日志,但无法归档。


✅ 总结建议

场景 推荐方式
长期运行 logrotate + copytruncate
临时处理 split
新项目 程序内置日志切割

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

  • 使用的是哪种语言(Python / Java / Shell)
  • 操作系统(CentOS / Ubuntu)
  • 是否不能重启进程

我可以给你一份可直接用的配置。

0 踩