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/
이 위치에는 파일이 없으므로 로그가 정확합니다. 그러나 첫 번째 명령 세트는 아무것도 다운로드하지 않았습니다.
우분투 시스템 로그
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)
메일 서버가 없으므로 마지막 세 줄은 괜찮습니다. 하지만 내 문제는 전체 명령이 실행되고 에코 외에는 아무 일도 일어나지 않는다는 것입니다. 하지만 이 count 명령이 실행되고 값이 0이므로 userlog에 대해 No files를 에코합니다.
답변1
aws
가장 큰 문제는 명령을 찾을 수 없다는 것입니다 .
다음 두 가지 방법 중 하나로 이 문제를 해결할 수 있습니다.
- 스크립트에서 명령을 호출할 때마다 명령의 전체 경로를 사용하십시오.
PATH
명령이 있는 디렉터리에 대한 경로를 포함하도록 스크립트를 수정합니다 .
또한보십시오: