nohup 默认会把输出追加到 nohup.out,时间久了会非常大。下面按推荐程度给你几种实用的分割/管理方案。
logrotate(最正规、最推荐)这是生产环境的标准做法。
nohup.outsudo vim /etc/logrotate.d/myapp
/path/to/nohup.out {
daily
rotate 7
size 100M
copytruncate
missingok
notifempty
compress
}
| 参数 | 含义 |
|---|---|
| daily | 每天切割 |
| size 100M | 超过 100M 就切割 |
| rotate 7 | 保留 7 个备份 |
| copytruncate | 复制后清空原文件(不重启进程) |
| compress | 压缩旧日志 |
✅ 优点:
nohup.outnohup java -jar app.jar > app-$(date +%Y%m%d).log 2>&1 &
⚠️ 缺点:不会自动切割,第二天要重启。
cronolog(按天自动切)nohup java -jar app.jar | cronolog logs/app-%Y%m%d.log &
安装:
yum install cronolog
# 或
apt install cronolog
✅ 优点:自动按天生成日志
❌ 缺点:需要额外工具
如果你已经有一个巨大的 nohup.out:
cp nohup.out nohup.out.bak
> nohup.out
或:
cat nohup.out > nohup_$(date +%F).log
> nohup.out
⚠️ 注意:
> nohup.out 比 rm 安全systemd(强烈推荐新项目)如果你用的是 Linux 服务器,不要用 nohup,用 systemd:
[Service]
StandardOutput=append:/var/log/myapp.log
StandardError=append:/var/log/myapp.log
再配合 logrotate。
| 场景 | 推荐方案 |
|---|---|
| 生产环境 | ✅ logrotate |
| 临时脚本 | 重定向 |
| 长期运行服务 | systemd + logrotate |
| 紧急处理 | 手动切割 |
如果你愿意,可以告诉我:
我可以帮你写一份完全可用的配置。