Quantcast
Channel: 小蓝博客
Viewing all articles
Browse latest Browse all 3145

CentOS下准实时SFTP上传2分钟前文件

$
0
0

CentOS 下准实时 SFTP 上传 2 分钟前文件的方案

在 CentOS 系统中,定期将生成的新文件通过 SFTP 上传到远程服务器是一个非常常见的需求。下面介绍如何实现准实时地将 2 分钟前创建或修改的文件通过 SFTP 上传的解决方案。

1. 整体思路 🧠

  • 通过 find 命令找到符合条件的文件(如 2 分钟前修改的文件)。
  • 使用 sftpscp 将这些文件上传到指定服务器。
  • 利用 crontab 实现准实时的自动化。

3. 脚本实现步骤

3.1 查找 2 分钟前的文件

使用 find 命令查找修改时间在 2 分钟前的文件。为了精确查找符合要求的文件,可以结合 -mmin 参数。

示例代码

find /path/to/your/directory -type f -mmin -2

解释

  • /path/to/your/directory:需要查找文件的目录路径。
  • -type f:表示只查找文件。
  • -mmin -2:表示查找在 2 分钟内修改过的文件。

3.2 上传文件到远程服务器

通过 sftp 命令上传这些文件。我们可以将查找到的文件逐一传输到远程服务器。

示例代码

#!/bin/bash

REMOTE_USER="your_user"
REMOTE_HOST="your_host"
REMOTE_DIR="/remote/path"
LOCAL_DIR="/path/to/your/directory"

# 查找 2 分钟前修改的文件
FILES=$(find $LOCAL_DIR -type f -mmin -2)

# 使用 SFTP 上传文件
for FILE in $FILES
do
  if [ -f "$FILE" ]; then
    sftp $REMOTE_USER@$REMOTE_HOST <<EOF
    put $FILE $REMOTE_DIR
    bye
EOF
  fi
done

解释

  • 变量设置

    • REMOTE_USER:远程服务器的用户名。
    • REMOTE_HOST:远程服务器的地址。
    • REMOTE_DIR:远程目录路径。
    • LOCAL_DIR:本地目录路径。
  • 查找文件:使用 find 查找符合条件的文件,结果存储在变量 FILES 中。
  • SFTP 上传

    • 通过 sftp 批量上传每个符合条件的文件。
    • 使用 Here Document (<<EOF ... EOF) 来简化 SFTP 的交互。

3.3 定时任务配置

为了实现准实时上传,我们可以通过 crontab 创建一个每分钟运行一次的定时任务。

示例代码

* * * * * /path/to/your/script.sh

解释

  • * * * * *:表示每分钟执行一次。
  • /path/to/your/script.sh:上面编写的脚本的完整路径。

4. 注意事项与优化建议 🔔

  1. 上传冲突与文件锁:为避免文件被部分上传或因文件正在写入而造成冲突,建议在上传前检测文件是否被占用
  2. 日志记录:添加日志记录以便后续调试和维护。
  3. 上传失败重试机制:为提高脚本的健壮性,可增加上传失败后的重试机制。

示例代码(添加日志)

LOG_FILE="/path/to/your/upload.log"

for FILE in $FILES
do
  if [ -f "$FILE" ]; then
    sftp $REMOTE_USER@$REMOTE_HOST <<EOF >> $LOG_FILE 2>&1
    put $FILE $REMOTE_DIR
    bye
EOF
    if [ $? -eq 0 ]; then
      echo "$(date '+%Y-%m-%d %H:%M:%S') - 成功上传: $FILE" >> $LOG_FILE
    else
      echo "$(date '+%Y-%m-%d %H:%M:%S') - 上传失败: $FILE" >> $LOG_FILE
    fi
  fi
done

解释

  • 日志文件路径LOG_FILE 用于指定日志的保存位置。
  • 重定向日志>> $LOG_FILE 2>&1 将标准输出和错误信息都保存到日志文件中。
  • 上传结果记录:使用 $? 检查上一步命令的返回值,记录上传成功或失败的情况。

5. 总结

通过 find 命令查找 2 分钟前修改的文件,并结合 sftpcrontab 实现准实时的文件上传,可以满足许多对数据实时性要求较高的场景。在实际使用中,考虑到文件占用、上传冲突以及网络问题,建议对脚本进行进一步的优化,比如增加上传重试文件锁定机制等功能,以确保文件上传的稳定性和可靠性。

🔴重点:通过 find 结合 sftp 上传 2 分钟前的文件,并使用定时任务实现准实时处理,可以有效地管理文件传输,确保数据的实时性和系统的自动化管理


Viewing all articles
Browse latest Browse all 3145

Trending Articles