在 Debian 下,用 nohup 启动程序通常会把输出重定向到 nohup.out,时间一长文件会非常大。下面按常见程度给你几种日志分割方案,从简单到专业。
split 定期切割(不推荐长期)nohup your_app >> nohup.out 2>&1 &
然后手动或定时切:
split -b 100M nohup.out nohup.log.
⚠️ 缺点:
logrotate(Debian 自带,最标准)改为:
nohup your_app >> /var/log/myapp/app.log 2>&1 &
sudo vim /etc/logrotate.d/myapp
内容示例:
/var/log/myapp/app.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
✅ copytruncate 很关键:
sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp
stdbuf + rotatelogs(Apache 工具)nohup stdbuf -oL your_app \
| rotatelogs -L /var/log/myapp/app.log 86400 &
安装:
sudo apt install apache2-utils
systemd(强烈推荐新项目)如果你能改成 systemd 服务:
[Service]
ExecStart=/path/your_app
StandardOutput=append:/var/log/myapp/app.log
然后直接用 journalctl + logrotate
如果是你自己的程序:
logging + RotatingFileHandlerlog4j / logback这是最干净的方式
| 场景 | 推荐方案 |
|---|---|
| 临时脚本 | copytruncate |
| 长期运行 | logrotate |
| 新服务 | systemd |
| 自己写程序 | 内置日志轮转 |
如果你愿意,可以告诉我:
我可以给你精确到可复制的配置。