在 Debian(以及大多数 Linux 发行版)里,nohup 本身不会自动切割日志,它只是把程序输出重定向到文件(通常是 nohup.out)。
要“切割 nohup 日志”,常见有 3 种做法,从简单到规范依次是:
cp nohup.out nohup.out.20260121
> nohup.out
⚠️ 注意:不要用 rm nohup.out,否则程序可能继续写“已删除文件”,磁盘不释放。
logrotate(✅ 推荐,系统级标准方案)/var/log/myproject/nohup.out
sudo vim /etc/logrotate.d/myproject
内容示例:
/var/log/myproject/nohup.out {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
copytruncate:最重要,适合 nohup 程序(不重启进程)daily:每天切rotate 7:保留 7 份compress:压缩旧日志sudo logrotate -d /etc/logrotate.d/myproject
sudo logrotate -f /etc/logrotate.d/myproject
✅ 这是最稳妥的方式
nohup ./app > /var/log/myproject/app.log 2>&1 &
然后用 logrotate 管理 app.log
systemd(✅ 最推荐,生产环境)写成 service:
[Unit]
Description=My App
[Service]
ExecStart=/opt/app/start.sh
StandardOutput=append:/var/log/myproject/app.log
StandardError=append:/var/log/myproject/error.log
Restart=always
[Install]
WantedBy=multi-user.target
然后:
journalctl -u myapp
systemd 自动管理日志。
❌ 不要:
rm nohup.out
✅ 要:
> nohup.out
或 copytruncate
| 场景 | 推荐方式 |
|---|---|
| 临时测试 | > nohup.out |
| 长期运行 | logrotate + copytruncate |
| 生产服务 | systemd |
如果你愿意,可以告诉我:
我可以直接帮你写完整配置。