Я пытаюсь запустить этот скрипт каждый день, используя crontb:
#/bin/bash
cd /home/banana/gdrive
DATE=`date +%Y-%m-%d`
mongodump --gzip --archive=$DATE
./gdrive upload ./$DATE
olddate="$(date "+%Y-%m-%d" -d "9 days ago")"
old2=$(date -d $olddate +%s)
#echo $old2
list="$(./gdrive list)"
#echo $list
ADDR=(${list// / })
ii=0
for i in "${ADDR[@]:5}"; do
if [ $(($ii % 7)) -eq 0 ]; then
id=$i
fi
if [ $(($ii % 7)) -eq 1 ]; then
name=$i
dat=$(date -d $name +%s)
#echo $dat
if [ $old2 -ge $dat ]; then
echo "delete"
echo $id
touch $id
./gdrive delete $id
fi
#echo "name"
#echo $name
#echo $id
fi
#echo $ii
#echo $i
let ii=ii+1
done
crontab entry:
0 2 * * * /home/banana/gdrive/upload.sh
сценарий отлично работает, если обедать в bash, если он запущен crontab, он не доходит до конца, даже если я не могу найти какую-либо зарегистрированную ошибку где угодно.
Путем моделирования использования среды crontab, как предлагается здесь: https://serverfault.com/questions/85893/running-a-cron-job-manually-and-immediately/85906
я обнаружил, что выполнение приводит к ошибке:
gdrive/upload.sh: 12: gdrive/upload.sh: Syntax error: "(" unexpected
, учитывая тот факт, что переменная SHELL в среде crontab была установлена в SHELL = / bin / sh и что синтаксис там bash этот звук вполне разумный (даже если я все еще запутался в роли # / bin / bash в первой строке скрипта).
Проблема в том, что тот же результат все еще даже после ввода SHELL = / bin / bash в файле crontab.
Итак, вопрос в том, что случилось в этой настройке? и как я могу запланировать этот скрипт с помощью crontab?