温馨提示×

怎么备份nohup日志文件呢

小樊
40
2026-08-05 09:15:46
栏目: 编程语言

nohup 默认会把输出写到 nohup.out,直接备份这个文件就行,但要注意 不要直接 cp 会导致日志继续写入旧文件的问题。下面给你几种正确、常用的备份方式


✅ 方式一:先备份,再清空(最推荐)

适合:长期运行的服务

cp nohup.out nohup.out.2026-01-21
> nohup.out

说明

  • cp:备份当前日志
  • > nohup.out清空原文件
  • 进程仍然向同一个 fd 写日志(不会断)

✅ 优点:简单、安全、不断服务
✅ 生产环境最常用


✅ 方式二:使用 logrotate(专业做法)

适合:日志长期存在、需要自动轮转

示例配置 /etc/logrotate.d/myapp

/path/to/nohup.out {
    daily
    rotate 7
    compress
    copytruncate
    missingok
    notifempty
}

关键参数

  • copytruncate:复制后截断原文件(⚠️ 有极少量日志丢失风险)
  • rotate 7:保留 7 份
  • compress:gzip 压缩

✅ 优点:自动化、规范
❌ 需要 root 权限


✅ 方式三:防止日志无限增长(从源头解决)

启动时就指定日志文件

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

然后备份:

cp app.log app.log.$(date +%F)
> app.log

✅ 比 nohup.out 更可控


✅ 方式四:直接备份(不推荐)

cp nohup.out nohup.out.bak

❌ 问题:

  • nohup.out 会越来越大
  • 磁盘可能打满

✅ 查看当前 nohup 输出文件

lsof -p <pid> | grep txt

或:

ls -l /proc/<pid>/fd

✅ 推荐实践总结

场景 推荐方式
临时任务 cp + >
长期服务 logrotate
新项目 启动时指定日志文件
生产环境 logrotate + 指定日志

如果你愿意,可以把你的 系统(CentOS / Ubuntu)运行方式(Java / Python / Shell) 发我,我可以帮你写一份 可直接用的备份脚本或 logrotate 配置

0