У меня есть root cron
задание, которое создает каталог на смонтированном другом HDD, а затем с помощью rsync
я копирую все файлы из SOURCE в TARGET. Скрипт выглядит так:
date_cmd='date +%Y_%m_%d_%H_%M_%S'
TS_SUFFIX=`eval ${date_cmd}`
SOURCE_DIR=/
TARGET_DIR=/mnt/backup_hdd/system_backup_${TS_SUFFIX}
LOG_DIR=/shared_utils/logs/backupper
LOG_FILE=${LOG_DIR}/backupper_${TS_SUFFIX}.log
mkdir -p ${TARGET_DIR}
chmod 770 ${TARGET_DIR}
rsync -a --append-verify --info=progress2 --exclude-from=${EXCLUDE_LIST} ${SOURCE_DIR} ${TARGET_DIR}
Проблема в том, что это chmod 770
не меняет TARGET
права доступа к каталогу на 770. Как видите, он создан с правами доступа 755.:
drwxr-xr-x 19 root root 4096 Mar 18 11:47 system_backup_2018_03_18_17_57_01/
Моя root cron
работа:
57 17 * * * umask 007; /path/to/script.sh
Как видите, перед выполнением скрипта я установил umask 007. Поэтому он терпит неудачу по двум причинам:
- Хотя я устанавливаю umask на
007
, фактические разрешения не соответствуют ожидаемым. - Хотя я явно изменяю права доступа
chmod 770
кTARGET
каталогу, права доступа все равно не изменяются.
Есть идеи, почему эти два случая не работают?
ОБНОВЛЯТЬ
Запуск скрипта также sudo script.sh
не изменяет разрешения TARGET
.
решение1
Спасибо PerlDuck
и Cyrus
тайна раскрыта.
rsync -a
создает каталог TARGET с теми же правами доступа, что и у SOURCE (в моем случае 755).