bash for-loop в скрипте не будет работать как не-root скрипт - PullRequest
2 голосов
/ 20 марта 2012

У меня есть скрипт cron, который я запускаю по ночам из общесистемного / etc / crontab следующим образом:

00 01 * * * www-data /root/scripts/image-auto-process.sh 1> /var/data/logs/cron.out 2> /var/data/logs/cron.err

Это bash-скрипт, который выполняет резервное копирование (с помощью rsync) некоторых каталогов, заполненных отсканированными jpegs, запускает php-программу для пакетной обработки этих jpegs (превью / миниатюры), загружает их на сервер и после успешного удаления удаляет первый из упомянутых каталоги. Все, кроме последнего шага очистки, работает как шарм. Однако, если я запускаю его из командной строки как пользователь www-данных, он работает. Когда он запускается через cron от имени того же пользователя, он этого не делает.

Последний шаг очистки выглядит следующим образом:

echo "remove original scans"
for i in `find $SCAN_ORIG_DIR -mindepth 2 -type d -print | grep -v -f $EXCLUDES`; do rm -rvf $i; done
echo "job Done..."

$SCAN_ORIG_DIR - каталог для поиска. $EXCLUDES - это файл (читаемый для www-данных), содержащий строки с каталогами, которые нужно игнорировать (этот же файл используется для указания rsync, что не для резервного копирования). -mindepth 2 используется в find, потому что я хочу вернуть только подкаталоги $SCAN_ORIG_DIR, которые также имеют подкаталоги, такие как $SCAN_ORIG_DIR/subdir/subsubdir.

Я попытался поместить приведенный выше код в его собственный скрипт и запустить его в командной строке и через cron, просто чтобы убедиться, что предыдущий код в скрипте не вызывал проблему. Результаты в командной строке (не точное представление, а просто для иллюстрации):

remove original scans
removed '$SCAN_ORIG_DIR/subdir1/subsubdir'
removed '$SCAN_ORIG_DIR/subdir2/subsubdir'
removed '$SCAN_ORIG_DIR/subdir3/subsubdir'
job Done...

Результаты через cron:

remove original scans
job Done...

Итак, я в тупике. Я искренне надеюсь, что любой может помочь пролить свет на то, что здесь не так. Большое спасибо за ваше время и усилия: -)

1 Ответ

1 голос
/ 22 марта 2012

Общая проблема со сценариями при запуске в cron заключается в том, что сценарии входа пользователя (.bashrc,, bash_profile) не выполняются, поэтому некоторые переменные отсутствуют.

Кстати, это не очень хорошая практикаиспользуйте общесистемный файл / etc / crontab.Используйте crontab -e для добавления заданий cron.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...