【发布时间】:2015-06-23 09:51:16
【问题描述】:
我正在尝试在运行 Amazon Linux 64 位的 EC2 实例上运行以下脚本,并安装了一些额外的东西(例如 lftp)作为 ShellCommandActivity 中 Amazon 数据管道的一部分。
INPUT_FILE_LIST=`/bin/ls -1 ${INPUT1_STAGING_DIR}` &&
SFTP_FILE_LIST=`/usr/bin/lftp -u username,password -e "set cmd:cls-default -1 && cls && bye" sftp://sftp.server.com` &&
while read name; do if `/bin/echo "$INPUT_FILE_LIST" | /bin/grep -q "^$name$"`; then OLD_FILES="$OLD_FILES $name"; fi; done < <(/bin/echo "$SFTP_FILE_LIST") &&
if [[ $OLD_FILES ]]; then /usr/bin/lftp -u username,password -e "rm ${OLD_FILES} && bye" sftp://sftp.server.com; fi
如果我删除带有 while 的行,它将运行到完成(ShellCommandActivity 达到 FINISHED 状态)但如果它存在,则脚本“失败”,即 ShellCommandActivity 最终处于 WAITING_ON_DEPENDENCIES 状态。
不幸的是,在这种情况下,Data Pipeline 服务没有写出任何日志,所以我不确定我为什么会遇到问题,如果我创建一个具有相同图像的实例并且我能够成功运行该命令并且实例类型并通过登录框自己运行命令。
从代码中可能已经很明显,所有这些的目标是从 sftp 服务器中删除 S3 存储桶中的文件。
注意事项:
-
INPUT1_STAGING_DIR是一个 S3 存储桶,该部分由数据管道管理,我已经确认这部分工作正常 - 脚本实际上都是在一行中执行的;这些行被分解以使其更易于运行,但在部署时,所有 4 行都连接在一起,每行之间只有一个空格,因此每行末尾的
&&和第三行中的所有;。李>
为方便起见,这里是格式更好的代码:
INPUT_FILE_LIST=`/bin/ls -1 ${INPUT1_STAGING_DIR}` &&
SFTP_FILE_LIST=`/usr/bin/lftp -u username,password -e "set cmd:cls-default -1 && cls && bye" sftp://sftp.server.com` &&
while read name; do
if `/bin/echo "$INPUT_FILE_LIST" | /bin/grep -q "^$name$"`; then
OLD_FILES="$OLD_FILES $name";
fi;
done < <(/bin/echo "$SFTP_FILE_LIST") &&
if [[ $OLD_FILES ]]; then
/usr/bin/lftp -u username,password -e "rm ${OLD_FILES} && bye" sftp://sftp.server.com;
fi
【问题讨论】:
标签: bash amazon-s3 amazon-ec2 lftp amazon-data-pipeline