Bash de copia de seguridad de la base de datos funciona a través de ssh pero no en cronjob

Bash de copia de seguridad de la base de datos funciona a través de ssh pero no en cronjob

He creado un script para hacer una copia de seguridad de mi base de datos en un host compartido. El guión es el siguiente:

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

Las credenciales de la base de datos se almacenan en un .cnf en /home/[usuario] y la clave de cifrado en el archivo de clave que se muestra en el script. Cuando ejecuto este script a través de SSH, todo funciona correctamente y se crea un archivo de respaldo. Sin embargo, el cronjob configurado para ejecutarse al principio de cada día no crea ningún archivo.

¿Algunas ideas?

Muchas gracias.

Respuesta1

Utilice lo siguiente para crear el trabajo cron con la cuenta de usuario correcta.

crontab -u <username> -e

Además, escape el % con '\'.

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

Respuesta2

La solución que encontré fue agregar al inicio del comando: cd /home/[usuario]/ && {resto del comando} como /home/[usuario]/ es donde se guardaban las credenciales de MySQL en un archivo .cnf que mysqldump requerido para el vertedero. También escapé del '%' al mismo tiempo, así que quizás eso también ayude. Gracias a @alex-atkinson por el consejo de escape.

información relacionada