温馨提示×

linux nohup日志怎么备份

小樊
49
2026-09-12 10:02:33
栏目: 智能运维

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

nohup your_command > app.log 2>&1 &

下面介绍几种常见、实用的 nohup 日志备份方式。


一、手动备份(最简单)

cp app.log app.log.bak

或带时间戳:

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

⚠️ 注意:这种方式只是复制,原日志仍在增长。


二、日志轮转(推荐:logrotate)

1. 安装(一般系统自带)

which logrotate

2. 新建配置

sudo vim /etc/logrotate.d/app

示例:

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

说明:

  • copytruncate:不重启进程就截断日志(非常适合 nohup)
  • daily:每天轮转
  • rotate 7:保留 7 份
  • compress:压缩旧日志

3. 手动测试

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

✅ 这是生产环境最推荐方案


三、脚本 + crontab 自动备份

备份脚本

vim backup_log.sh
#!/bin/bash
LOG=/opt/app/app.log
BAK=/opt/backup/app.log.$(date +%Y%m%d)

cp $LOG $BAK
> $LOG

⚠️ > $LOG 会清空日志,nohup 进程仍可继续写

加执行权限

chmod +x backup_log.sh

定时任务

crontab -e
0 2 * * * /opt/backup_log.sh

四、使用 logrotate + copytruncate 的原理(重要)

nohup 进程 → 文件描述符 → app.log
logrotate copytruncate:
  1. 复制 app.log → app.log.1
  2. 清空 app.log
  3. 进程继续写 app.log

✅ 不需要 kill / 重启进程


五、常见错误

❌ 直接 mv app.log app.log.bak

  • nohup 进程仍写旧 inode,日志“丢失”

❌ 删除 app.log

  • 磁盘空间不释放,直到进程退出

✅ 正确方式:copytruncate 或 > log


六、总结建议

场景 推荐方式
开发测试 手动 cp
生产环境 logrotate
不想装工具 crontab + 脚本

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

  • 你的 Linux 发行版
  • 日志 路径和大小
  • 是否 不能重启进程

我可以帮你写一套完整配置。

0 踩