Ubuntu 10.04: скрипт bash завершается сбоем в cronjob, когда используется тест [-e] - PullRequest
0 голосов
/ 14 февраля 2012

Я отлично запускаю скрипт из командной строки, но он не работает, когда помещается в 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 также потерпит неудачу.

1 Ответ

2 голосов
/ 14 февраля 2012

Кажется, вы полагаетесь на определение $ {USER}.Это не тот случай, когда вы работаете как cronjob.

...