温馨提示×

nohup日志过大如何处理

小樊
43
2026-10-24 02:06:37
栏目: 编程语言

nohup 本身只是“忽略挂断信号并运行命令”,日志变大是程序输出没控制导致的。常见处理思路如下:


一、根本解决:不要让 nohup 直接写大日志

1. 使用日志轮转(推荐)

不要让 nohup xxx > nohup.out 一直写。

方案 A:用 logrotate(系统级,最稳)

/your/path/nohup.out {
    size 100M
    rotate 5
    copytruncate
    missingok
    compress
}
  • copytruncate:不重启进程也能截断日志(适合 nohup)
  • 适合长期运行服务

方案 B:程序自身支持日志切割

  • Java:logback / log4j2
  • Python:logging + RotatingFileHandler
  • Go:zap / logrus

2. 用 split 切分(简单粗暴)

nohup your_cmd | split -b 100m - nohup_part_

生成:

nohup_part_aa
nohup_part_ab

3. 用 cronolog(按时间切)

nohup your_cmd | cronolog /log/%Y%m%d.log

二、应急:日志已经很大了

1. 安全清空(不杀进程)

: > nohup.out
# 或
truncate -s 0 nohup.out

⚠ 不要 rm nohup.out,进程还持有文件句柄,磁盘不会释放。


2. 查找大日志

du -sh nohup.out
lsof | grep deleted

三、更好的启动方式(推荐)

用 systemd(而不是 nohup)

[Service]
StandardOutput=append:/var/log/app.log

配合 logrotate,专业且省心。


四、总结建议

  • ✅ 长期运行:logrotate + copytruncate
  • ✅ 新项目:别用 nohup,用 systemd
  • ❌ 避免:nohup xxx > nohup.out 无限增长

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

  • 什么语言/程序
  • 是否在容器里
  • 日志增长速度

我可以给你更精确的配置。

0 踩