温馨提示×

如何切割CentOS nohup日志

小樊
41
2026-08-30 13:33:12
栏目: 智能运维

在 CentOS 下使用 nohup 运行程序时,日志通常会写入 nohup.out 或你指定的日志文件。随着时间推移,这个文件会越来越大,影响磁盘和排查问题。下面按常见场景给你几种安全、可控的切割方式


一、最常见:用 logrotate 切割(✅ 强烈推荐)

logrotate 是 CentOS 自带的日志管理工具,最规范、最安全。

1️⃣ 创建一个 logrotate 配置

假设你的 nohup 日志是:

/home/app/nohup.out

新建配置文件:

sudo vim /etc/logrotate.d/nohup_app

内容示例:

/home/app/nohup.out {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
    dateext
}

2️⃣ 配置说明

  • daily:每天切割
  • rotate 7:保留 7 份
  • missingok:文件不存在不报错
  • notifempty:空文件不切割
  • compress:压缩旧日志
  • copytruncate:✅ 关键
    • 复制当前日志内容
    • 再清空原文件
    • 不会中断正在运行的程序
  • dateext:日志带日期后缀

生成文件示例:

nohup.out
nohup.out-2026-01-21.gz
nohup.out-2026-01-20.gz

3️⃣ 测试是否生效

sudo logrotate -vf /etc/logrotate.d/nohup_app

二、如果你用的是指定日志文件(更推荐)

如果你是这样启动的:

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

那更推荐用 logrotate 管理 app.log,而不是 nohup.out

示例:

/var/log/app/app.log {
    size 100M
    rotate 10
    compress
    copytruncate
    missingok
    notifempty
}

三、手动切割(临时方案)

⚠️ 不推荐长期使用

cp nohup.out nohup.out.bak
> nohup.out

或:

cat nohup.out > nohup.out.$(date +%F)
> nohup.out

风险:

  • 可能丢日志
  • 不会自动执行

四、启动时就避免 nohup.out 无限增长(最佳实践 ✅)

✅ 方法 1:输出到指定日志

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

✅ 方法 2:按日期输出

nohup ./app.sh > app_$(date +%F).log 2>&1 &

五、如果你用的是 Java / Python / Node(补充)

Java

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

建议配合 logback / log4j 自身日志滚动。

Python

nohup python app.py >> app.log 2>&1 &

Node

nohup node app.js >> app.log 2>&1 &

六、总结(推荐方案)

场景 推荐做法
生产环境 logrotate + copytruncate
临时处理 手动 cp + >
新项目 指定日志文件
长期运行 应用自身日志组件

如果你愿意,可以把你的 启动命令nohup 使用方式发出来,我可以直接帮你写一份完全可用的 logrotate 配置

0