温馨提示×

centos nohup日志如何轮转

小樊
49
2026-09-06 07:58:41
栏目: 智能运维

在 CentOS 上,nohup 本身是不会做日志轮转的,它只是把输出重定向到文件(如 nohup.out)。日志轮转需要借助 logrotate 或应用自身机制。

下面给你几种常见、可行方案,从推荐到临时方案。


一、推荐方案:使用 logrotate(标准做法)

1. 示例场景

假设你用 nohup 启动程序:

nohup /opt/app/app.sh >> /var/log/app/app.log 2>&1 &

2. 创建 logrotate 配置文件

sudo vi /etc/logrotate.d/app

内容示例:

/var/log/app/app.log {
    daily
    missingok
    notifempty
    size 100M
    rotate 7
    compress
    delaycompress
    copytruncate
}

3. 关键参数说明

  • copytruncate:非常重要,适用于 nohup 程序(不能发送信号)
  • size 100M:超过 100M 就轮转
  • rotate 7:保留 7 个旧日志
  • compress:压缩旧日志

4. 测试配置

logrotate -d /etc/logrotate.d/app   # 模拟
logrotate -f /etc/logrotate.d/app  # 强制执行

二、nohup.out 的轮转(常见坑)

很多人直接用:

nohup java -jar app.jar &

会生成 nohup.out

正确做法(推荐)

不要直接写 nohup.out,改为:

nohup java -jar app.jar >> /var/log/app/app.log 2>&1 &

然后按上面的 logrotate 配置即可。


三、应用自身支持日志轮转(更好)

如果程序支持:

  • Log4j / Logback(按大小、按天)
  • Spring Boot(logging.file + logging.logback)

✅ 这是最优雅方案 ✅ 不需要 copytruncate ✅ 不会丢日志


四、临时/简单方案(不推荐长期使用)

1. 手动清空

: > nohup.out

2. cron 定时切割(粗糙)

0 0 * * * mv /var/log/app/app.log /var/log/app/app.log.$(date +%F)

⚠ 风险:nohup 进程可能继续写旧 fd


五、总结建议

场景 建议
长期运行服务 logrotate + copytruncate
Java / Spring 用框架日志轮转
临时脚本 重定向 + logrotate
nohup.out 太大 改成指定日志文件

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

  • CentOS 版本(6 / 7 / 8 / Stream)
  • 启动命令示例
  • 日志文件路径

我可以帮你直接写一份可用的 logrotate 配置。

0 踩