Я пытался настроить rsync для резервного копирования каталога каждый день с именем текущего дня.
rsync --verbose --stats --compress --recursive /home/alpha/ /var/backups/alpha/`date +"%a"`
Выше команды хорошо работает и синхронизирует данные в Mon
каталог. Но когда я копирую ту же команду в кроне, это не работает
13 16 * * * rsync --verbose --stats --compress --recursive /home/alpha/ /var/backups/alpha/`date +"%a"`
Но когда я удаляю 'дату + "%a"', часть от крона она работает.
Почему крон не выполняет 'дату + "%a"'?
Знак %
должен быть экранирован с помощью \
, так как это альтернативный способ завершения команды в crontab
.
«Шестое» поле (остальная часть строки) определяет команду, которую нужно запустить. Вся командная часть строки, вплоть до новой строки или символа%, будет выполняться / bin / sh или оболочкой, указанной в переменной SHELL файла cron. Знаки процента (%) в команде, если они не экранированы с помощью обратной косой черты (), будут заменены на символы новой строки, и все данные после первого% будут отправлены команде как стандартный ввод.
Итак, ваш crontab Строка
должна выглядеть так:
13 16 * * * rsync --verbose --stats --compress --recursive /home/alpha/ /var/backups/alpha/`date +"\%a"`
Источники:
Вы также можете использовать:
13 16 * * * bash -c "rsync --verbose --stats --compress --recursive /home/alpha/ /var/backups/alpha/`date +'%a'`"