温馨提示×

linux nohup日志怎样分割

小樊
37
2026-10-21 01:06:02
栏目: 智能运维

在 Linux 下使用 nohup 启动程序时,日志通常会写入 nohup.out 或指定文件。如果日志不断增长,就需要日志分割(切割)。常见做法有以下几种:


一、使用 logrotate(最推荐)

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

示例

假设日志文件是 /home/user/app/nohup.out

  1. 创建配置文件:
sudo vim /etc/logrotate.d/myapp
  1. 写入内容:
/home/user/app/nohup.out {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

参数说明

  • daily:每天切割
  • rotate 7:保留 7 份
  • compress:压缩旧日志
  • copytruncate:复制后清空原文件(不影响 nohup 进程)
  • notifempty:空文件不切割

✅ copytruncate 对 nohup 非常重要,因为它不会重启进程


二、使用 cron + split 手动切割

如果你不想用 logrotate:

0 0 * * * mv nohup.out nohup.out.$(date +\%Y\%m\%d) && touch nohup.out

⚠️ 问题:

  • mv 后 nohup 仍写旧文件描述符
  • 需要程序支持重新打开日志

不推荐用于 nohup


三、使用 nohup + split

启动时就分割:

nohup your_command | split -b 100m - app.log. &
  • 每 100MB 一个文件
  • 文件名类似 app.log.aa

缺点:

  • 不方便按时间
  • 不支持压缩

四、使用 stdbuf + logrotate

nohup stdbuf -oL your_command > app.log 2>&1 &

配合 logrotate 效果更好,避免缓冲问题。


五、最佳实践总结

✅ 推荐方案

nohup + logrotate(copytruncate)

✅ 适合场景

  • 长期运行
  • 不想改代码
  • 不想重启进程

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

  • 用什么语言(Java / Python / Shell)
  • 日志路径
  • 是否可重启程序

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

0 踩