Cron操作がトリガーされましたが、エコーは効果がないと予想されます。

Cron操作がトリガーされましたが、エコーは効果がないと予想されます。

S3からファイルをダウンロードするシェルスクリプトがあります。スクリプトを手動で実行でき、うまく機能しますが、Cronでスケジュールするとトリガーされますが、コマンド以外はecho何もしません。

スクリプト

#!/usr/bin/env bash

set -e
echo "starting"
y_day=$(date --date="-1 day" +%d)
y_month=$(date --date="-1 day" +%m)
y_year=$(date --date="-1 day" +%Y)

files=$( aws s3 ls  s3://bucket/log/$y_year/$y_month/$y_day/ | grep _mylog_ | awk -F ' ' '{print $4}')

for file in $files
do
aws s3 cp s3://bucket/log/$y_year/$y_month/$y_day/$file /opt/local_log/
done

## Next files
count=$( aws s3 ls  s3://bucket/testlog/$y_year/$y_month/$y_day/ | grep _testlog_ | wc -l)

if [ $count -gt 0 ]
then
files=$( aws s3 ls  s3://bucket/testlog/$y_year/$y_month/$y_day/ | grep _testlog_ | awk -F ' ' '{print $4}')

for file in $files
do
aws s3 cp s3://bucket/testlog/$y_year/$y_month/$y_day/$file /opt/localtestlog/
done
else
echo "No files for userlog"
fi

予約されたこと

10 13 * * * /opt/script/copy.sh > /tmp/copy.log

ログファイル(/tmp/copy.log)

starting
No files for userlog

s3://bucket/testlog/$y_year/$y_month/$y_day/この場所にはファイルがないため、ログは正しいです。しかし、最初のコマンドセットは何もダウンロードしませんでした。

Ubuntuシステムログ

Jun  5 19:04:01 ip-10-23-53-161 CRON[6984]: (root) CMD (/opt/script/copy.sh > /tmp/copy.log
)
Jun  5 19:04:01 ip-10-23-53-161 cron[6952]: sendmail: fatal: open /etc/postfix/main.cf: No such file or directory
Jun  5 19:04:01 ip-10-23-53-161 postfix/sendmail[7012]: fatal: open /etc/postfix/main.cf: No such file or directory
Jun  5 19:04:01 ip-10-23-53-161 CRON[6979]: (root) MAIL (mailed 1490 bytes of output but got status 0x004b from MTA#012)

メールサーバーがないので、最後の3行は大丈夫です。しかし、私の問題は、コマンド全体が実行され、エコー以外には何も起こらないということです。ただし、このcountコマンドが実行され、値が0なので、userlogに対してNo filesをエコーし​​ます。

ベストアンサー1

aws最大の問題は、コマンドが見つからないことです。

次の 2 つの方法のいずれかでこの問題を解決できます。

  1. スクリプトからコマンドを呼び出すたびに、コマンドのフルパスを使用してください。
  2. PATHコマンドを含むディレクトリへのパスを含めるようにスクリプトを変更します。

また見なさい:

おすすめ記事