在 Debian 下用 nohup 启动程序,默认会把输出写到 nohup.out,时间一长很容易变得非常大。常见处理和优化办法如下:
nohup.out 怎么处理: > nohup.out
# 或
truncate -s 0 nohup.out
✅ 推荐,程序还在写,不会中断
rm nohup.out
⚠️ 如果程序还开着文件句柄,磁盘空间不会释放,必须重启程序
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 &
split 自动分片nohup ./myapp | split -b 100m - myapp.log.
rotatelogs(Apache 自带)nohup ./myapp | rotatelogs /var/log/myapp.%Y%m%d.log 86400 &
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.outnohup + logrotatesystemd如果你愿意,可以告诉我:
我可以给你一套可直接用的配置。