温馨提示×

debian如何分割nohup日志

小樊
39
2026-09-25 19:26:02
栏目: 智能运维

在 Debian(以及其它 Linux 系统)上,nohup 本身不会自动分割日志,它只是把输出重定向到文件(通常是 nohup.out)。当日志越来越大时,需要借助日志分割/轮转机制来处理。

下面给你几种常用且实用的方法,从简单到专业。


一、最推荐:使用 logrotate(标准做法)

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

示例:分割 nohup.out

假设你的程序是:

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

1. 创建 logrotate 配置文件

sudo vim /etc/logrotate.d/myapp

内容示例:

/opt/myapp/nohup.out {
    size 100M
    rotate 5
    copytruncate
    compress
    missingok
    notifempty
}

参数说明

  • size 100M:超过 100M 就分割
  • rotate 5:保留 5 个旧日志
  • copytruncate:复制后清空原文件(不中断程序)
  • compress:压缩旧日志
  • missingok:文件不存在也不报错

2. 手动测试

sudo logrotate -d /etc/logrotate.d/myapp

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


二、启动时直接用 split 分割(不推荐长期使用)

nohup python app.py | split -b 100m - nohup.log. &

会生成:

nohup.log.aa
nohup.log.ab

❌ 缺点:

  • 文件名不直观
  • 无法自动清理
  • 不利于排查

三、使用 cronolog(老方案)

nohup python app.py | cronolog /opt/myapp/log/%Y%m%d.log &

按天生成日志:

/opt/myapp/log/20260121.log

⚠️ 现在用得少了,不如 logrotate


四、让程序自己写日志(最佳实践)

最推荐的方式其实是:不要让 nohup 管日志

例如 Python:

import logging

logging.basicConfig(
    filename='/opt/myapp/app.log',
    rotation=...
)

或用 supervisor / systemd


五、如果你只是临时处理大文件

# 清空 nohup.out(不删文件)
: > nohup.out

或

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

总结建议

场景 方案
生产服务 ✅ logrotate
临时脚本 split / 手动清理
新项目 程序自写日志 + systemd
长期运行 ❌ 不要只靠 nohup.out

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

  • 你运行的程序语言(Python / Java / Shell)
  • 是否 7×24 运行
  • Debian 版本

我可以给你定制一份 logrotate 配置。

0 踩