Я отлично запускаю скрипт из командной строки, но он не работает, когда помещается в cronjob. Я сузил его до конкретной проблемы с проверкой существования файла с помощью [-e "name"]. Запустив его на 32-битном рабочем столе Ubuntu, я могу написать следующий скрипт и заставить его работать при вызове из командной строки:
#!/bin/bash
# define statements
IMPORT="/home/${USER}/data_imports/fitb"
ARCHIVE="${IMPORT}/archive"
declare -a CENTERS
CENTERS[0]="ct"
CENTERS[1]="ny"
len=${#CENTERS[*]}
RUNDATE=`date --date=yesterday +"%m%d"`
ARCHIVEDATE=`date --date=yesterday +"%Y_%m_%d"`
i=0
while [ $i -lt $len ]; do
if [ -e "${ARCHIVE}/fitb_${ARCHIVEDATE}_${CENTERS[i]}.csv" ]
then touch ~/data_imports/fitb/shell_${i}.rn
fi
let i++
done
Если я закомментирую строки "if", "then", & "fi" после помещения команды touch в собственную строку, цикл while будет работать нормально в cronjob. Если я верну тест if, я ничего не получу. Чтобы проверить, был ли он вообще захвачен демоном cron, я переместил команду touch в строку после shebang, так что это первая команда, которая запускается. Это ничего не дает. Я знаю, что файлы, проверенные с -e, находятся в правильном расположении с глобальным разрешением rx. Может ли быть так, что -e должен быть + w для успешного выполнения теста? Я подумал, что это может быть связано с тем, что переменные не наследуются подоболочками (из которых, по моему пониманию, tst является своего рода), но если бы это было так, я бы подумал, что вызов CLI также потерпит неудачу.