在 CentOS 下使用 nohup 运行程序时,日志通常会写入 nohup.out 或你指定的日志文件。随着时间推移,这个文件会越来越大,影响磁盘和排查问题。下面按常见场景给你几种安全、可控的切割方式。
logrotate 切割(✅ 强烈推荐)logrotate 是 CentOS 自带的日志管理工具,最规范、最安全。
假设你的 nohup 日志是:
/home/app/nohup.out
新建配置文件:
sudo vim /etc/logrotate.d/nohup_app
内容示例:
/home/app/nohup.out {
daily
rotate 7
missingok
notifempty
compress
copytruncate
dateext
}
daily:每天切割rotate 7:保留 7 份missingok:文件不存在不报错notifempty:空文件不切割compress:压缩旧日志copytruncate:✅ 关键
dateext:日志带日期后缀生成文件示例:
nohup.out
nohup.out-2026-01-21.gz
nohup.out-2026-01-20.gz
sudo logrotate -vf /etc/logrotate.d/nohup_app
如果你是这样启动的:
nohup java -jar app.jar > app.log 2>&1 &
那更推荐用 logrotate 管理 app.log,而不是 nohup.out。
示例:
/var/log/app/app.log {
size 100M
rotate 10
compress
copytruncate
missingok
notifempty
}
⚠️ 不推荐长期使用
cp nohup.out nohup.out.bak
> nohup.out
或:
cat nohup.out > nohup.out.$(date +%F)
> nohup.out
风险:
nohup ./app.sh > app.log 2>&1 &
nohup ./app.sh > app_$(date +%F).log 2>&1 &
nohup java -jar app.jar > app.log 2>&1 &
建议配合 logback / log4j 自身日志滚动。
nohup python app.py >> app.log 2>&1 &
nohup node app.js >> app.log 2>&1 &
| 场景 | 推荐做法 |
|---|---|
| 生产环境 | ✅ logrotate + copytruncate |
| 临时处理 | 手动 cp + > |
| 新项目 | 指定日志文件 |
| 长期运行 | 应用自身日志组件 |
如果你愿意,可以把你的 启动命令 或 nohup 使用方式发出来,我可以直接帮你写一份完全可用的 logrotate 配置。