
Я составил скрипт для резервного копирования моей базы данных на общем хосте. Скрипт выглядит следующим образом:
mysqldump --databases [db1] [db2] | openssl aes-256-cbc -a -salt -pass file:/home/[user]/etc/.keys/.backup_key | gzip > /home/[user]/backup/$(date +%Y:%m:%d:%H:%M:%S).gz
Учетные данные базы данных хранятся в .cnf в /home/[user], а ключ шифрования в файле ключей, показанном в скрипте. Когда я запускаю этот скрипт через SSH, все работает правильно и создается файл резервной копии. Однако cronjob, установленный для выполнения в начале каждого дня, не создает никаких файлов.
Есть идеи?
Большое спасибо.
решение1
Используйте следующую команду для создания задания cron под нужной учетной записью пользователя.
crontab -u <username> -e
Также экранируйте % с помощью '\'.
mysqldump --databases [db1] [db2] | openssl aes-256-cbc -a -salt -pass file:/home/[user]/etc/.keys/.backup_key | gzip > /home/[user]/backup/$(date +\%Y:\%m:\%d:\%H:\%M:\%S).gz
решение2
Решение, которое я нашел, заключалось в добавлении к началу команды: cd /home/[user]/ && {rest of command}, так как /home/[user]/ — это место, где хранились учетные данные mysql в файле .cnf, который mysqldump требовал для дампа. Я также экранировал '%' в то же время, так что, возможно, это тоже помогает. Спасибо @alex-atkinson за совет по экранированию.