nohup 本身不会自动分割日志,通常是把所有输出追加到 nohup.out。常见、实用的分割方式如下,按推荐程度排序。
split 手动/定时分割(不改程序)适合已经用:
nohup your_app >> nohup.out 2>&1 &
split -b 100M nohup.out nohup.log.
生成:
nohup.log.aa
nohup.log.ab
# 每天凌晨切割
0 0 * * * mv nohup.out nohup.out.$(date +\%F) && touch nohup.out
⚠️ 注意:
mv 后程序仍写原 fd,需要 touch 新文件并重启或支持 reopenlogrotate(生产首选 ✅)/etc/logrotate.d/myapp/opt/app/nohup.out {
daily
rotate 7
size 100M
missingok
notifempty
copytruncate
}
关键参数说明:
copytruncate:复制后清空原文件(不重启进程)size:超过大小就切rotate 7:保留 7 份测试:
logrotate -d /etc/logrotate.d/myapp # 调试
logrotate -f /etc/logrotate.d/myapp # 强制执行
✅ 最安全、最常用
rotatelogs(Apache 工具)nohup your_app | rotatelogs -l /var/log/app/%Y%m%d.log 86400 &
multilog(daemontools)nohup your_app | multilog s1000000 n10 /var/log/app &
这样 完全不需要 nohup.out
> nohup.out
只能清空,不能保留历史。
| 场景 | 方案 |
|---|---|
| 生产环境 | ✅ logrotate |
| 临时脚本 | split |
| 新项目 | 程序内日志轮转 |
| 已运行不能重启 | copytruncate |
如果你愿意,可以告诉我:
我可以给你精确配置。