温馨提示×

debian nohup日志过大咋办

小樊
49
2026-09-25 19:21:00
栏目: 智能运维

在 Debian 下用 nohup 启动程序,默认会把输出写到 nohup.out,时间一长很容易变得非常大。常见处理和优化办法如下:


一、Already 很大的 nohup.out 怎么处理

1. 直接清空(不删文件,不影响程序)

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

✅ 推荐,程序还在写,不会中断

2. 删除后重启(不推荐)

rm nohup.out

⚠️ 如果程序还开着文件句柄,磁盘空间不会释放,必须重启程序


二、从根本上解决:不要让日志无限增长

✅ 方案 1:启动时就重定向 + 按大小/时间切割(推荐)

用 logrotate(最规范)

适合长期运行服务

示例 /etc/logrotate.d/myapp:

/var/log/myapp.log {
    size 100M
    rotate 5
    compress
    missingok
    notifempty
    copytruncate
}

启动方式:

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

✅ 方案 2:用 split 自动分片

nohup ./myapp | split -b 100m - myapp.log.

✅ 方案 3:用 rotatelogs(Apache 自带)

nohup ./myapp | rotatelogs /var/log/myapp.%Y%m%d.log 86400 &

✅ 方案 4:用 systemd(最推荐长期方案)

把程序写成 service:

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

然后:

journalctl -u myapp

三、如果根本不需要日志

nohup ./myapp > /dev/null 2>&1 &

四、快速自查命令

# 看哪个文件大
du -sh nohup.out

# 看进程是否还占着被删文件
lsof | grep deleted

总结推荐

  • 临时:truncate -s 0 nohup.out
  • 长期:nohup + logrotate
  • 生产:直接上 systemd

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

  • 是什么程序(Java / Python / C++)
  • 是否在服务器长期跑

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

0 踩