Резервное копирование базы данных bash работает через ssh, но не в cronjob

Резервное копирование базы данных bash работает через ssh, но не в cronjob

Я составил скрипт для резервного копирования моей базы данных на общем хосте. Скрипт выглядит следующим образом:

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 за совет по экранированию.

Связанный контент