Shell-Script
觸發了 Cron 作業 - 但期望 echo 沒有任何效果
我有一個從 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
是找不到該命令。您可以通過以下兩種方式之一解決此問題:
- 每次在腳本中呼叫命令時都使用命令的完整路徑。
- 在腳本中修改
PATH
以包含找到命令的目錄的路徑。也可以看看: