You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unix下检测S3文件夹更新并执行命令的文件监控脚本实现咨询

Unix环境S3文件夹更新监控脚本实现方案

前置依赖准备

你需要先完成以下环境配置:

  • 安装AWS CLI v2,可执行aws --version验证安装是否成功
  • 配置AWS访问凭证,可通过aws configure设置Access Key/Secret Key,或给运行脚本的实例绑定对应IAM角色,需至少授予s3:ListBucket权限
  • 确认目标S3路径格式为s3://<桶名>/<文件夹前缀>/,末尾斜杠代表监控该文件夹下的所有内容

核心脚本代码

#!/bin/bash
# 自定义配置项,根据实际场景修改
S3_MONITOR_PATH="s3://your-bucket/target-folder/"
CHECK_INTERVAL=30 # 两次检查的间隔时间,单位:秒
CUSTOM_EXEC_CMD="your-predefined-command" # 检测到更新后要执行的Unix命令
STATE_SAVE_PATH="/tmp/s3_monitor_last_check_state"

# 首次运行初始化状态文件
if [ ! -f "${STATE_SAVE_PATH}" ]; then
  aws s3 ls --recursive "${S3_MONITOR_PATH}" | sha256sum | awk '{print $1}' > "${STATE_SAVE_PATH}"
fi

# 循环检测逻辑
while true
do
  # 生成当前S3路径的状态哈希(包含文件列表、大小、修改时间,任意项变化都会导致哈希变更)
  CURRENT_STATE=$(aws s3 ls --recursive "${S3_MONITOR_PATH}" | sha256sum | awk '{print $1}')
  LAST_STATE=$(cat "${STATE_SAVE_PATH}")

  # 状态对比,不一致则触发自定义命令
  if [ "${CURRENT_STATE}" != "${LAST_STATE}" ]; then
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] 检测到S3路径更新,执行预设命令"
    eval ${CUSTOM_EXEC_CMD}
    # 更新状态文件
    echo "${CURRENT_STATE}" > "${STATE_SAVE_PATH}"
  fi

  sleep ${CHECK_INTERVAL}
done

脚本使用步骤

  • 将上述代码保存为s3_monitor.sh,执行chmod +x s3_monitor.sh赋予可执行权限
  • 修改脚本开头的自定义配置项,替换为你实际的S3路径、检查间隔、要执行的命令
  • 前台测试运行:执行./s3_monitor.sh,手动上传/修改/删除S3目标路径下的文件,确认可以正常触发预设命令
  • 后台常驻运行:执行nohup ./s3_monitor.sh > /var/log/s3_monitor.log 2>&1 &,运行日志会统一写入/var/log/s3_monitor.log方便排查问题

可选优化方案

  • 如果监控的S3路径下文件数量极多,可改用aws s3api list-objects-v2接口仅拉取最新的文件修改时间,降低接口请求开销
  • 如需开机自启动,可将脚本注册为systemd服务,或添加到/etc/rc.local中
  • 可自行添加通知逻辑,在命令执行成功或失败时发送邮件、企业微信/钉钉告警
  • 如需仅监控特定格式的文件,可在aws s3 ls --recursive命令后添加grep "\.csv$"之类的过滤规则,匹配你需要监控的文件后缀

内容的提问来源于stack exchange,提问作者Mihir Garg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:39:02