在 CentOS 下使用 nohup 运行程序时,日志默认会写到 nohup.out,但它不会自动按日期切分。要实现按日期生成日志,常见做法有以下几种(从简单到规范):
在启动命令里用 日期变量 指定日志文件名:
nohup java -jar app.jar > app-$(date +%Y%m%d).log 2>&1 &
app-20260121.log✅ 适合:简单项目、定时重启、每天只跑一个实例
即使你一开始用的是 nohup.out,也可以用 cron 每天切分。
nohup java -jar app.jar > nohup.out 2>&1 &
crontab -e
0 0 * * * mv nohup.out nohup-$(date +\%Y\%m\%d).log && touch nohup.out
⚠️ crontab 中
%需要转义
✅ 适合:已有 nohup 程序、不想改启动脚本
vim /etc/logrotate.d/myapp
/opt/app/nohup.out {
daily
rotate 30
missingok
notifempty
compress
copytruncate
dateext
dateformat -%Y%m%d
}
daily:每天切rotate 30:保留 30 天copytruncate:不重启程序就能切日志(适合 nohup)dateext:生成 nohup.out-20260121logrotate -f /etc/logrotate.d/myapp
✅ 适合:长期运行服务、生产环境
如果程序可以配置日志(如 Java / Python / Go):
nohup java -jar app.jar \
> /opt/logs/app-$(date +%Y%m%d).log 2>&1 &
或使用 logback / log4j2 的按天滚动日志。
✅ 最推荐,但取决于程序能力
| 方式 | 适合场景 | 是否自动 |
|---|---|---|
| 启动时按日期命名 | 简单应用 | ❌ |
| cron 切分 | 老项目 | ✅ |
| logrotate | 生产环境 | ✅✅ |
| 程序自身日志 | 新项目 | ✅✅✅ |
如果你愿意,可以告诉我:
我可以帮你给出最适合你场景的完整示例。