Shell-Script

觸發了 Cron 作業 - 但期望 echo 沒有任何效果

  • June 5, 2020

我有一個從 S3 下載文件的 shell 腳本。我可以手動執行腳本,它工作正常,但是當我從 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 行很好。但我的問題是,完整的命令執行,除了迴聲,沒有處理他們的工作。但是這個計數命令執行並且值為 0,所以它確實回顯了使用者日誌的無文件。

主要問題似乎aws是找不到該命令。

您可以通過以下兩種方式之一解決此問題:

  1. 每次在腳本中呼叫命令時都使用命令的完整路徑。
  2. 在腳本中修改PATH以包含找到命令的目錄的路徑。

也可以看看:

引用自:https://unix.stackexchange.com/questions/591081