温馨提示×

CentOS nohup日志如何分日期

小樊
53
2026-08-30 13:50:12
栏目: 智能运维

在 CentOS 下使用 nohup 运行程序时,日志默认会写到 nohup.out,但它不会自动按日期切分。要实现按日期生成日志,常见做法有以下几种(从简单到规范):


✅ 方式一:直接在启动命令中按日期命名日志(最常用)

在启动命令里用 日期变量 指定日志文件名:

nohup java -jar app.jar > app-$(date +%Y%m%d).log 2>&1 &

效果

  • 当天日志:app-20260121.log
  • 第二天需要 重启或重新执行命令 才会生成新文件

✅ 适合:简单项目、定时重启、每天只跑一个实例


✅ 方式二:使用 cron + 按日期切割(推荐)

即使你一开始用的是 nohup.out,也可以用 cron 每天切分。

示例:每天 0 点切分 nohup.out

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 程序、不想改启动脚本


✅ 方式三:使用 logrotate(生产环境最规范 ✅)

1️⃣ 创建 logrotate 配置

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-20260121

2️⃣ 测试

logrotate -f /etc/logrotate.d/myapp

✅ 适合:长期运行服务、生产环境


✅ 方式四:日志直接交给程序自身(最佳实践)

如果程序可以配置日志(如 Java / Python / Go):

Java 示例

nohup java -jar app.jar \
> /opt/logs/app-$(date +%Y%m%d).log 2>&1 &

或使用 logback / log4j2 的按天滚动日志。

✅ 最推荐,但取决于程序能力


✅ 总结对比

方式 适合场景 是否自动
启动时按日期命名 简单应用
cron 切分 老项目
logrotate 生产环境 ✅✅
程序自身日志 新项目 ✅✅✅

如果你愿意,可以告诉我:

  • 运行的是什么程序(Java / Python / Shell)
  • 是否生产环境
  • 是否允许重启

我可以帮你给出最适合你场景的完整示例

0