温馨提示×

centos nohup日志如何滚动

小樊
46
2026-08-04 09:42:52
栏目: 智能运维

在 CentOS 下使用 nohup 运行程序时,日志默认会写入 nohup.out,但它不会自动滚动,时间久了会越来越大。下面给你几种常用且实用的日志滚动方案,从简单到规范。


一、最简单:重定向 + 手动/定时切日志(不推荐长期)

1️⃣ 启动时指定日志文件

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

2️⃣ 切日志(手动或 cron)

mv app.log app.log.20260121
touch app.log
kill -USR1 $(pidof java)

⚠️ 只有部分程序(如 Java、Nginx)支持 USR1 重新打开日志文件
不支持的程序需要重启


二、✅ 推荐方案:使用 logrotate(最标准)

这是 CentOS 官方推荐 的日志滚动方式,适合生产环境。

1️⃣ 安装 logrotate

yum install -y logrotate

2️⃣ 创建 logrotate 配置文件

vim /etc/logrotate.d/myapp

示例(非常常用):

/opt/app/app.log {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
    dateext
}

参数说明

参数 作用
daily 每天滚动
rotate 7 保留 7 份
missingok 日志不存在也不报错
notifempty 空文件不滚动
compress 压缩旧日志
copytruncate 复制后清空(无需重启)
dateext 日期后缀

3️⃣ 测试是否生效

logrotate -vf /etc/logrotate.d/myapp

三、✅ Java 程序推荐:用 logback / log4j2 自带滚动

如果你运行的是 Java 程序,千万不要只靠 nohup.out

logback 示例

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>
</configuration>

然后:

nohup java -jar app.jar >/dev/null 2>&1 &

专业、稳定、不丢日志


四、不推荐但常见:cron + 脚本切日志

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

⚠️ 缺点:

  • 可能丢日志
  • 需要重启程序
  • 不如 logrotate 稳定

五、总结推荐 ✅

场景 推荐方案
普通脚本 logrotate + copytruncate
Java 程序 logback / log4j2
临时测试 重定向日志
生产环境 ✅ logrotate

如果你愿意,可以把你的 启动命令 / 程序类型(Java / Python / Shell) 发出来,我可以帮你写一份完全可用的 logrotate 配置

0