在 Linux 下使用 nohup 运行程序时,日志默认会写入 nohup.out(或你重定向的文件),但它不会自动分割,时间久了会非常大。常见做法有下面几种:
logrotate(最标准)logrotate 是 Linux 自带日志管理工具,适合长期运行服务。
示例:
nohup your_app >> /var/log/app/app.log 2>&1 &
新建配置 /etc/logrotate.d/app:
/var/log/app/app.log {
size 100M
rotate 5
copytruncate
missingok
notifempty
compress
}
说明:
size 100M:超过 100M 就分割rotate 5:保留 5 个旧日志copytruncate:复制后清空原文件(不重启进程)compress:压缩旧日志✅ 适合
nohup程序不能重启的场景
split(简单粗暴)nohup your_app | split -b 100m - /var/log/app/app.log.
生成:
app.log.aa
app.log.ab
缺点:
multilog(daemontools)nohup sh -c 'your_app | multilog s1000000000 n5 /var/log/app' &
s1000000000:每个日志 1GBn5:保留 5 份svlogd(runit)类似 multilog,适合服务化管理
如果程序支持:
✅ 最推荐,不用外部工具
nohup your_app >> nohup.out
❌ 日志无限增长,迟早出问题
| 场景 | 推荐方式 |
|---|---|
| 长期运行 | logrotate |
| 临时脚本 | split |
| 服务型程序 | 程序内日志切割 |
| 不能重启进程 | copytruncate |
如果你愿意,可以告诉我:
我可以给你精准配置示例。