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 つの方法のいずれかでこの問題を解決できます。
- スクリプトからコマンドを呼び出すたびに、コマンドのフルパスを使用してください。
PATH
コマンドを含むディレクトリへのパスを含めるようにスクリプトを変更します。
また見なさい: