nohup 命令本身不会自动分割日志,它只是把标准输出/错误追加到 nohup.out 里,不轮转、不归档。
要实现 nohup 日志分割,常见做法有下面几种(从简单到推荐)。
nohup java -jar app.jar > app.log 2>&1 &
然后定期:
mv app.log app.log.2026-01-21
touch app.log
⚠️ 缺点:
logrotate(✅ 最推荐)假设日志路径:
/opt/app/nohup.out
创建 logrotate 配置:
sudo vim /etc/logrotate.d/app
内容示例:
/opt/app/nohup.out {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
| 参数 | 说明 |
|---|---|
| daily | 按天轮转 |
| rotate 7 | 保留 7 份 |
| compress | 压缩旧日志 |
| missingok | 日志不存在不报错 |
| notifempty | 空文件不轮转 |
| copytruncate | 复制后清空(适合 nohup) |
✅ 不需要重启程序,适合 nohup 场景
nohup java -jar app.jar > app-$(date +%Y%m%d).log 2>&1 &
缺点:
cronolog(老系统常用)nohup ./app | cronolog app.%Y%m%d.log &
✅ 自动按天切割
❌ 需要额外安装 cronolog
如果你可以不用 nohup,强烈推荐 systemd
[Unit]
Description=app
[Service]
ExecStart=/usr/bin/java -jar /opt/app/app.jar
StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/app.log
Restart=always
[Install]
WantedBy=multi-user.target
再用 logrotate 管理 /var/log/app/app.log
| 场景 | 推荐方案 |
|---|---|
| 临时测试 | nohup 重定向 |
| 生产环境 | ✅ nohup + logrotate |
| 长期运行 | ✅ systemd + logrotate |
| 老系统 | cronolog |
如果你愿意,可以告诉我:
我可以帮你写一份 可直接用的 logrotate 配置。