Я хотел бы создать резервную копию из каталога, используя cron. Я написал следующую команду:
cd path && sudo zip -r "backup-$(date +"%Y-%m-%d").zip" git/ && sudo mv "backup-$(date +"%Y-%m-%d").zip" /backup/
, когда я звоню из командной строки, тогда все в порядке. Но когда я помещаю это в cron тогда, это не работает. Журнал содержит только часть этой команды и ничего более. Что мне делать?
Содержание Crontab:
* * * * * cd path && zip -r "backup-$(date +"%Y-%m-%d").zip" git/ && mv "backup-$(date +"%Y-%m-%d").zip" /backup
/
Это происходит потому, что (crontab manpage ):
Вся командная часть строки, вплоть до новой строки или символа%, будет выполнена / bin / sh или оболочкой, указанной в переменной SHELL файла crontab. Знаки процента (%) в команде, если они не экранированы обратной косой чертой (), будут изменены на символы новой строки, и все данные после первого% будут отправлены команде в качестве стандартного ввода.
blockquote>Поскольку вы используете
%
в своей команде резервного копирования, «вы должны поместить это в файл .sh,chmod +x file
, а затем вызвать этот файл из cron», как предложено в LnxSlck .
По запросу я перехожу к ответу:
Поместите команды, которые вы хотите выполнить, в файл .sh , например:
1. vi test.sh
cd path && sudo zip -r "backup-$(date +"%Y-%m-%d").zip" git/ && sudo mv "backup-$(date +"%Y-%m-%d").zip" /backup/
Сохранить и выход.
Запуск на консоли
2. chmod +x test.sh
Вызов файла fron cron с желаемой периодичностью:
3. crontab -e
#Run every hour
0 * * * * /path/to/file/test.sh
Убедитесь, что пользователь, использующий cron для выполнения файла, имеет разрешения запустить файл.