我有一个 shell 脚本来从 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)
我没有邮件服务器,所以最后三行没问题。但我的问题是,完整的命令运行了,除了回显之外,没有任何东西处理他们的工作。但是这个count命令运行并且值为0,所以它确实回显了No files for userlog。
答案1
主要问题似乎是aws
找不到该命令。
您可以通过以下两种方式之一解决此问题:
- 每次在脚本中调用该命令时,请使用该命令的完整路径。
- 修改
PATH
脚本以包含找到命令的目录的路径。
也可以看看: