温馨提示×

debian nohup日志如何分割

小樊
37
2026-09-28 17:06:08
栏目: 智能运维

在 Debian 下,用 nohup 启动程序通常会把输出重定向到 nohup.out,时间一长文件会非常大。下面按常见程度给你几种日志分割方案,从简单到专业。


一、最简单:用 split 定期切割(不推荐长期)

nohup your_app >> nohup.out 2>&1 &

然后手动或定时切:

split -b 100M nohup.out nohup.log.

⚠️ 缺点:

  • 切割时程序仍在写文件
  • 容易丢日志或重复

二、推荐:用 logrotate(Debian 自带,最标准)

1. 不要让 nohup 直接写 nohup.out

改为:

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

2. 创建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

内容示例:

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

✅ copytruncate 很关键:

  • 不重启程序
  • 复制后清空原文件
  • 适合 nohup 程序

3. 测试

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

三、更优雅:stdbuf + rotatelogs(Apache 工具)

nohup stdbuf -oL your_app \
| rotatelogs -L /var/log/myapp/app.log 86400 &
  • 每天一个文件
  • 不需要 copytruncate
  • 适合长时间运行服务

安装:

sudo apt install apache2-utils

四、专业方案:用 systemd(强烈推荐新项目)

如果你能改成 systemd 服务:

[Service]
ExecStart=/path/your_app
StandardOutput=append:/var/log/myapp/app.log

然后直接用 journalctl + logrotate


五、Python / Java 等自带日志

如果是你自己的程序:

  • Python:logging + RotatingFileHandler
  • Java:log4j / logback

这是最干净的方式


总结建议

场景 推荐方案
临时脚本 copytruncate
长期运行 logrotate
新服务 systemd
自己写程序 内置日志轮转

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

  • 是什么程序(Python / Java / C++)
  • 是否一定能改启动方式

我可以给你精确到可复制的配置。

0 踩