在 CentOS 上,用 nohup 启动程序通常会把输出重定向到 nohup.out,时间久了会非常大。下面给你几种常用且实用的日志分割/滚动方案,从简单到专业。
>> + 定时切分(不推荐长期使用)nohup java -jar app.jar >> app.log 2>&1 &
然后每天用 cron 备份:
0 0 * * * mv /path/app.log /path/app.log.$(date +\%Y\%m\%d)
⚠️ 问题:程序仍写旧文件,需要重启或信号切换,不推荐生产
logrotate(CentOS 自带,最常用)假设日志是:
/nohup/app.log
vi /etc/logrotate.d/app
内容示例:
/nohup/app.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
}
| 参数 | 作用 |
|---|---|
daily |
每天分割 |
rotate 7 |
保留 7 份 |
compress |
压缩旧日志 |
copytruncate |
复制后清空原文件(nohup 不重启也能用) |
notifempty |
空文件不分割 |
logrotate -f /etc/logrotate.d/app
✅ 这是 CentOS 上最推荐方案
cronolog(按时间自动切)yum install cronolog -y
nohup java -jar app.jar 2>&1 | cronolog /logs/app.%Y%m%d.log &
日志会自动按天生成:
app.20260121.log
app.20260122.log
✅ 不需要 logrotate
❌ 老项目,维护较少
如果是 Java / Python:
✅ 不依赖系统
✅ 最稳定
| 场景 | 推荐 |
|---|---|
| 简单脚本 | logrotate + copytruncate |
| 长期运行服务 | 程序内日志切割 |
| 不想配置 | cronolog |
如果你愿意,可以把启动命令或程序类型(Java/Python/Shell)发我,我可以帮你写一份可直接用的配置。