温馨提示×

linux nohup日志怎样备份

小樊
37
2026-09-06 14:39:54
栏目: 智能运维

在 Linux 下使用 nohup 启动程序时,通常会把输出重定向到日志文件,例如:

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

下面介绍几种常见的 nohup 日志备份方法,从简单到规范。


一、手动复制备份(最简单)

cp app.log app.log.bak_$(date +%Y%m%d_%H%M%S)

适合:

  • 偶尔备份
  • 日志不大

二、清空并备份(避免日志无限增长)

cp app.log app.log.$(date +%Y%m%d)
> app.log

或等价写法:

mv app.log app.log.$(date +%Y%m%d)
touch app.log

⚠️ 注意:

  • mv 方式对 nohup 进程仍然写入同一 inode,一般没问题
  • > 会清空文件,但进程继续写

三、使用 logrotate(推荐,最规范 ✅)

1. 安装(一般已自带)

which logrotate

2. 新建配置

sudo vim /etc/logrotate.d/app

示例:

/path/to/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

关键参数说明:

  • copytruncate不重启进程,复制后清空原日志(适合 nohup)
  • rotate 7:保留 7 份
  • compress:压缩旧日志

3. 手动测试

sudo logrotate -f /etc/logrotate.d/app

这是生产环境最推荐方式


四、定时任务自动备份(crontab)

crontab -e

每天凌晨备份:

0 0 * * * cp /path/to/app.log /backup/app.log.$(date +\%Y\%m\%d)

或配合清空:

0 0 * * * mv /path/to/app.log /backup/app.log.$(date +\%Y\%m\%d) && touch /path/to/app.log

五、更优雅的做法(从根本上解决)

1. 使用 stdout + systemd(推荐新项目)

[Service]
StandardOutput=append:/var/log/app.log

2. 程序自身支持日志轮转

很多服务(Java / Python)可配置:

  • 日志大小限制
  • 自动切割

总结建议

场景 推荐方式
临时 / 测试 cpmv
生产环境 logrotate
自动化 cron + logrotate

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

  • 用的什么程序(Java / Python / Shell)
  • 日志增长速度
  • 是否在服务器长期运行

我可以帮你写一套可直接用的备份方案

0