温馨提示×

nohup日志如何定时清理

小樊
39
2026-08-20 09:24:26
栏目: 编程语言

nohup 命令默认会把输出写到 nohup.out,时间久了会非常大。下面给你几种常用、可定时清理的方案,从简单到规范。


一、最简单:直接清空 nohup.out(不删除文件)

推荐做法

: > nohup.out
# 或
truncate -s 0 nohup.out
  • 不会中断程序
  • 文件 inode 不变
  • 程序继续往同一个文件写

二、启动时避免 nohup.out 无限增长(推荐)

1️⃣ 重定向到指定日志文件

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

2️⃣ 按天滚动(最常用)

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

三、使用 logrotate(生产环境最佳实践 ✅)

示例:每天自动清理 / 滚动 nohup.out

1️⃣ 创建 logrotate 配置

sudo vim /etc/logrotate.d/nohup
/path/to/nohup.out {
    daily
    rotate 7
    size 100M
    missingok
    notifempty
    copytruncate
}

2️⃣ 参数说明

参数 作用
daily 每天轮转
rotate 7 保留 7 份
size 100M 超过 100M 才轮转
copytruncate 不中断程序
missingok 文件不存在也不报错

不需要重启程序


四、用 crontab 定时清理(简单粗暴)

每天凌晨清空 nohup.out

crontab -e
0 3 * * * truncate -s 0 /path/to/nohup.out

⚠️ 缺点:日志会丢失


五、启动时就禁用 nohup.out(不推荐但可用)

nohup ./app > /dev/null 2>&1 &

或只保留错误日志:

nohup ./app > /dev/null 2>>err.log &

六、推荐方案总结 ✅

场景 推荐方案
临时脚本 : > nohup.out
生产服务 logrotate
简单定时 crontab + truncate
长期运行 重定向日志 + 滚动

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

  • 程序类型(Java / Python / Shell)
  • 是否运行在 Docker
  • 是否需要保留历史日志

我可以帮你写一份完全适合你环境的清理方案

0