在 Linux 下使用 nohup 启动程序时,日志通常会写入 nohup.out 或指定文件。如果日志不断增长,就需要日志分割(切割)。常见做法有以下几种:
logrotate(最推荐)logrotate 是 Linux 自带的日志管理工具,适合长期运行的服务。
假设日志文件是 /home/user/app/nohup.out
sudo vim /etc/logrotate.d/myapp
/home/user/app/nohup.out {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
daily:每天切割rotate 7:保留 7 份compress:压缩旧日志copytruncate:复制后清空原文件(不影响 nohup 进程)notifempty:空文件不切割✅
copytruncate对nohup非常重要,因为它不会重启进程
cron + split 手动切割如果你不想用 logrotate:
0 0 * * * mv nohup.out nohup.out.$(date +\%Y\%m\%d) && touch nohup.out
⚠️ 问题:
mv 后 nohup 仍写旧文件描述符不推荐用于 nohup
nohup + split启动时就分割:
nohup your_command | split -b 100m - app.log. &
app.log.aa缺点:
stdbuf + logrotatenohup stdbuf -oL your_command > app.log 2>&1 &
配合 logrotate 效果更好,避免缓冲问题。
✅ 推荐方案
nohup + logrotate(copytruncate)
✅ 适合场景
如果你愿意,可以告诉我:
我可以帮你写一份可直接用的 logrotate 配置。