在 CentOS 下用 nohup 启动程序时,日志通常会写到类似 nohup.out 的文件里。备份这种日志常见有几种做法,下面按实用程度给你说明。
cp nohup.out nohup.out.bak_$(date +%Y%m%d)
或压缩备份:
tar czf nohup.out_$(date +%Y%m%d).tar.gz nohup.out
⚠️ 注意:备份后 nohup.out 还会继续变大,不会自动清空。
如果程序一直在写 nohup.out:
cp nohup.out nohup.out.bak
> nohup.out
或者:
mv nohup.out nohup.out.$(date +%F)
touch nohup.out
✅ 好处:日志不会无限增长
❌ 风险:如果程序用文件句柄写日志,mv 后可能还写旧文件(见下文)
CentOS 自带 logrotate,非常适合 nohup.out
vi /etc/logrotate.d/myapp
内容:
/opt/app/nohup.out {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
说明:
copytruncate:复制后清空原文件(不中断程序)rotate 7:保留 7 份compress:压缩旧日志测试:
logrotate -d /etc/logrotate.d/myapp # 调试
logrotate -f /etc/logrotate.d/myapp # 强制执行
✅ 这是生产环境最推荐方式
不要依赖 nohup.out:
nohup java -jar app.jar > /var/log/myapp/app.log 2>&1 &
然后:
logrotate /etc/logrotate.d/myapp
crontab -e
每天凌晨备份:
0 0 * * * cp /opt/app/nohup.out /backup/nohup.out.$(date +\%F)
| 场景 | 建议 |
|---|---|
| 临时测试 | 手动 cp |
| 长期运行 | logrotate + copytruncate |
| 新项目 | nohup 重定向到指定日志 |
如果你愿意,可以告诉我:
我可以帮你写一套完整备份方案。