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