1

ShellCommandActivity の Amazon Data Pipeline の一部として、いくつかの追加機能 (lftp など) をインストールして、Amazon Linux 64 ビットを実行している EC2 インスタンスで次のスクリプトを実行しようとしています。

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 サービスはログを書き出さないため、なぜ問題が発生するのかわかりません。同じイメージとインスタンス タイプでインスタンスを作成し、ボックスにログインして、自分でコマンドを実行します。

コードからすでに明らかなように、これらすべての目的は、S3 バケット内のファイルを sftp サーバーから削除することです。

ノート:

  • INPUT1_STAGING_DIRは S3 バケットであり、その部分は Data Pipeline によって管理されており、この部分が機能していることは既に確認済みです
  • スクリプトは実際にはすべて 1 行で実行されます。実行しやすいように行は分割されていますが、展開すると、4 行すべてがそれぞれの間にスペースがあるだけで連結されます。したがって、&&各行の最後と;3 行目のすべてが連結されます。

便宜上、より適切なフォーマットのコードを次に示します。

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
4

2 に答える 2

0

これは私のために働く

input=$(aws s3 ls $1 | awk '{print  $4}')
echo "$input"
于 2015-06-23T01:51:16.043 に答える