温馨提示×

如何分割debian nohup日志

小樊
46
2026-10-25 03:07:25
栏目: 智能运维

在 Debian(以及其它 Linux 系统)中,nohup 命令默认会把输出写入 nohup.out 文件。如果这个日志文件越来越大,就需要进行分割(rotate / split)。常见做法有以下几种:


一、使用 logrotate(推荐,系统级方案)

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

示例:为 nohup.out 配置 logrotate

假设你的程序在 /home/user/app/ 目录下运行,nohup.out 路径为:

/home/user/app/nohup.out
  1. 创建配置文件:
sudo nano /etc/logrotate.d/myapp
  1. 写入内容:
/home/user/app/nohup.out {
    size 100M
    rotate 5
    copytruncate
    missingok
    notifempty
    compress
    delaycompress
}

参数说明:

  • size 100M:日志超过 100M 就分割
  • rotate 5:保留 5 个旧日志
  • copytruncate:复制后清空原文件(不重启进程)
  • compress:压缩旧日志
  • missingok:文件不存在也不报错
  1. 测试配置:
sudo logrotate -d /etc/logrotate.d/myapp
  1. 手动执行:
sudo logrotate /etc/logrotate.d/myapp

✅ 优点:自动化、稳定、不影响进程
❌ 注意:必须使用 copytruncate,否则 nohup 进程可能无法继续写日志


二、使用 split 手动分割(一次性)

如果你只是想把一个大的 nohup.out 拆开:

split -b 100M nohup.out nohup_part_

会生成:

nohup_part_aa
nohup_part_ab
...

✅ 适合临时处理
❌ 不会自动清理原文件


三、从源头避免大日志(更好做法)

1. 重定向输出到带日期的日志

nohup ./app.sh > app_$(date +%Y%m%d).log 2>&1 &

2. 使用 rotatelogs(Apache 工具)

nohup ./app.sh | rotatelogs -n 7 app_%Y%m%d.log 86400 &

每天一个日志,保留 7 天。


四、常见错误

❌ 直接 mv nohup.out nohup.out.old
→ 进程仍写原 inode,日志丢失或混乱

✅ 正确方式:

  • logrotate + copytruncate
  • 或重定向到新文件

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

  • 你的 nohup 启动命令
  • 日志路径
  • 是否允许重启进程

我可以帮你写一套可直接用的配置。

0 踩