Bash de backup de banco de dados funcionando via ssh, mas não em cronjob

Bash de backup de banco de dados funcionando via ssh, mas não em cronjob

Elaborei um script para fazer backup do meu banco de dados em um host compartilhado. O roteiro é o seguinte:

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

As credenciais do banco de dados são armazenadas em um .cnf em /home/[user] e a chave de criptografia no arquivo de chave mostrado no script. Quando executo este script via SSH, tudo funciona corretamente e um arquivo de backup é criado. No entanto, nenhum arquivo é criado pelo cronjob configurado para ser executado no início de cada dia.

Alguma ideia?

Muito obrigado.

Responder1

Use o seguinte para criar o cron job na conta de usuário correta.

crontab -u <username> -e

Além disso, escape de% com '\'.

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

Responder2

A solução que descobri foi anexar ao início do comando: cd /home/[user]/ && {rest of command} como /home/[user]/ é onde as credenciais do mysql foram mantidas em um arquivo .cnf que mysqldump necessário para o despejo. Eu também escapei do '%' ao mesmo tempo, então talvez isso também ajude. Obrigado a @alex-atkinson pela dica de fuga.

informação relacionada