使用nohup和--remove-source-files在后台运行rsync并记录日志方式

2025-05-21 02:50

本文主要是介绍使用nohup和--remove-source-files在后台运行rsync并记录日志方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日...

一、什么是 --remove-source-files?

  • 作用:在文件成功同步到目标路径后,删除源路径中的文件。
  • 适用场景:需要将文件从一处“移动”到另一处,而不是保留副本,例如清理旧数据、迁移文件到新存储。
  • 注意:此选项只删除文件,不会删除源目录结构。

与常见的 mv 命令相比,rsync --remove-source-files 更适合跨设备或跨网络的移动操作,因为它支持增量传输和错误恢复。

二、示例命令

以下是一个使用 nohup--remove-source-files 的完整命令模板:

nohup rsync -androidav --remove-source-files /source/path/ /destination/path/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &

让我们逐步拆解这条命令。

三、命令详解

1. nohup

  • 作用:确保任务在终端javascript关闭后继续运行,忽略挂起信号(SIGHUP)。
  • 用法:置于命令开头。

2. rsync -av --remove-source-files

  • -a(归档模式):递归同步目录,保留文件属性(如权限、时间戳)。
  • -v(详细输出):显示同步和删除的详细信息。
  • --remove-source-files:同步完成后删除源文件。

源路径和目标路径

  • /source/path/:包含需要移动的文件或目录。
  • /destination/path/:文件的目标位置。

3. 日志重定向

> /var/log/rsync_$(date +%Y%m%d_%H%M%S).log

  • 将标准输出重定向到日志文件。
  • 使用 $(date +%Y%m%d_%H%M%S) 生成时间戳,例如 rsync_20250324_153022.log

2>&1:将标准错误也重定向到日志文件,确保所有信息都被记录。

4. 后台运行 &

  • 作用:将任务放入后台,释放终端。

四、使用场景与示例

场景1:本地文件移动

/data/old/ 中的文件移动到 /data/new/

nohpythonup rsync -av --remove-source-files /data/old/ /data/new/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &
  • 结果/data/old/ 中的文件被同步到 /data/new/ 并删除,目录结构保留。

场景2:远程文件迁移

将本地文件移动到远程服务器

nohup rsync -avz --remove-source-files -e ssh /local/data/ user@remote:/remote/data/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &
  • -z:压缩数据,优化网络传输。
  • -e ssh:通过SSH连接远程服务器。

场景3:特定文件移动

只移动特定类型的文件(例如 .txt 文件):

nohup rsync -av --remove-source-files --include '*.txt' --exclude '*' /source/ /destination/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 &
  • --include--exclude 组合过滤需要移动的文件。

五、操作步骤

准备工作

  • 确保源路径和目标路径存在且可访问。
  • 创建日志目录:mkdir -p /var/log/
  • 检查权限:对源路径有读写权限,对目标路径和日志路径有写权限。

执行命令

  • 输入命令并运行,任务将在后台启动。
  • 查看进程ps -ef | grep rsync

验证结果

  • 检查日志:tail -f /var/log/rsync_*.log,确认同步和删除操作。
  • 检查源路径:确认文件已被删除。
  • 检查目标路径:确认文件已正确同步。

六、--remove-source-files 的工作原理

  • 同步优先:只有当文件成功同步到目标路径后,源文件才会被删除。
  • 安全:如果同步失败(例如目标磁盘满或网络中断),源文件会保留。
  • 目录保留:不会删除源路径中的空目录,仅影响文件。

例如:

  • 源目录 /source/ 包含:
/source/
├── file1.txt
├── file2.txt
└── subdir/
    └── file3.txt

运行 rsync -av --remove-source-files /source/ /dest/ 后:

  • /dest/ 包含所有文件。
  • /source/ 变为:
/source/
└── subdir/
  • 文件被删除,但目录结构保留。

七、注意事项

谨慎使用

  • --remove-source-files 会永久删除源文件,操作前建议备份或测试。
  • 可先用 --dry-run 模拟运行,检查结果:rsync -av --remove-source-files --dry-run /source/ /dest/

磁盘空间

  • 确保目标路径有足够空间,否则同步失败,源文件不会删除。

日志重要性

  • 日志记录了删除和同步的细节,若出现问题,可快速定位。

权限问题

  • 源文件删除需要写权限,目标路径写入需要相应权限。

网络中断

  • 远程同步时,若中断,rsync 支持续传,未完成的文件不会删除。

八、高级用法

  • 限制带宽:避免影响网络,添加 --bwlimit=1000(1MB/s)。

定时任务:结合cron,每天凌晨2点移动文件:

0 2 * * * nohup rsync -av --remove-source-files /source/ /dest/ > /var/log/rsync_$(date +\%Y\%m\%d_\%H\js%M\%S).log 2>&1 &

错误通知:添加失败提示:

nohup jsrsync -av --remove-source-files /source/ /dest/ > /var/log/rsync_$(date +%Y%m%d_%H%M%S).log 2>&1 || echo "Rsync failed" | mail -s "Error" admin@example.com &

总结

通过 nohup--remove-source-files,我们可以安全、高效地将文件从一处移动到另一处,并利用日志记录整个过程。

这一方法在数据迁移、清理旧文件等场景中尤为实用。只要注意权限、空间和备份,就能充分发挥其优势。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于使用nohup和--remove-source-files在后台运行rsync并记录日志方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154697

相关文章

使用Nginx配置文件服务器方式

《使用Nginx配置文件服务器方式》:本文主要介绍使用Nginx配置文件服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 为什么选择 Nginx 作为文件服务器?2. 环境准备3. 配置 Nginx 文件服务器4. 将文件放入服务器目录5. 启动 N

Qt之QMessageBox的具体使用

《Qt之QMessageBox的具体使用》本文介绍Qt中QMessageBox类的使用,用于弹出提示、警告、错误等模态对话框,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.简单介绍3.常见函数4.按钮类型(QMessage::StandardButton)5.分步骤实现弹窗6.总结1.引言

Python使用Reflex构建现代Web应用的完全指南

《Python使用Reflex构建现代Web应用的完全指南》这篇文章为大家深入介绍了Reflex框架的设计理念,技术特性,项目结构,核心API,实际开发流程以及与其他框架的对比和部署建议,感兴趣的小伙... 目录什么是 ReFlex?为什么选择 Reflex?安装与环境配置构建你的第一个应用核心概念解析组件

Qt中Qfile类的使用

《Qt中Qfile类的使用》很多应用程序都具备操作文件的能力,包括对文件进行写入和读取,创建和删除文件,本文主要介绍了Qt中Qfile类的使用,具有一定的参考价值,感兴趣的可以了解一下... 目录1.引言2.QFile文件操作3.演示示例3.1实验一3.2实验二【演示 QFile 读写二进制文件的过程】4.

spring security 超详细使用教程及如何接入springboot、前后端分离

《springsecurity超详细使用教程及如何接入springboot、前后端分离》SpringSecurity是一个强大且可扩展的框架,用于保护Java应用程序,尤其是基于Spring的应用... 目录1、准备工作1.1 引入依赖1.2 用户认证的配置1.3 基本的配置1.4 常用配置2、加密1. 密

WinForms中主要控件的详细使用教程

《WinForms中主要控件的详细使用教程》WinForms(WindowsForms)是Microsoft提供的用于构建Windows桌面应用程序的框架,它提供了丰富的控件集合,可以满足各种UI设计... 目录一、基础控件1. Button (按钮)2. Label (标签)3. TextBox (文本框

MySQL Workbench工具导出导入数据库方式

《MySQLWorkbench工具导出导入数据库方式》:本文主要介绍MySQLWorkbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录mysql Workbench工具导出导入数据库第一步 www.chinasem.cn数据库导出第二步

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin

Vue中插槽slot的使用示例详解

《Vue中插槽slot的使用示例详解》:本文主要介绍Vue中插槽slot的使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、插槽是什么二、插槽分类2.1 匿名插槽2.2 具名插槽2.3 作用域插槽三、插槽的基本使用3.1 匿名插槽