在 Debian(以及其它 Linux 系统)中,nohup 命令默认会把输出写入 nohup.out 文件。如果这个日志文件越来越大,就需要进行分割(rotate / split)。常见做法有以下几种:
logrotate(推荐,系统级方案)logrotate 是 Debian 自带的日志管理工具,适合长期运行的服务。
nohup.out 配置 logrotate假设你的程序在 /home/user/app/ 目录下运行,nohup.out 路径为:
/home/user/app/nohup.out
sudo nano /etc/logrotate.d/myapp
/home/user/app/nohup.out {
size 100M
rotate 5
copytruncate
missingok
notifempty
compress
delaycompress
}
参数说明:
size 100M:日志超过 100M 就分割rotate 5:保留 5 个旧日志copytruncate:复制后清空原文件(不重启进程)compress:压缩旧日志missingok:文件不存在也不报错sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate /etc/logrotate.d/myapp
✅ 优点:自动化、稳定、不影响进程
❌ 注意:必须使用 copytruncate,否则 nohup 进程可能无法继续写日志
split 手动分割(一次性)如果你只是想把一个大的 nohup.out 拆开:
split -b 100M nohup.out nohup_part_
会生成:
nohup_part_aa
nohup_part_ab
...
✅ 适合临时处理
❌ 不会自动清理原文件
nohup ./app.sh > app_$(date +%Y%m%d).log 2>&1 &
rotatelogs(Apache 工具)nohup ./app.sh | rotatelogs -n 7 app_%Y%m%d.log 86400 &
每天一个日志,保留 7 天。
❌ 直接 mv nohup.out nohup.out.old
→ 进程仍写原 inode,日志丢失或混乱
✅ 正确方式:
logrotate + copytruncate如果你愿意,可以告诉我:
nohup 启动命令我可以帮你写一套可直接用的配置。