Actualización de la entrada anterior (Programar copias de seguridad con CronJobs en cPanel). Este código toma automáticamente los datos del archivo de configuración de WordPress para crear los backups.
#!/usr/bin/php <?php $ruta = trim ( shell_exec('echo $HOME'), " \t\n\r\0\x0B"); include($ruta.'/public_html/wp-config.php'); $command = 'mysqldump -u'.DB_USER.' -p'.DB_PASSWORD.' '.DB_NAME.' | gzip > '.$ruta.'/backups/backup_$(date +\%Y-\%m-\%d_\%H:\%Mh)_basededatos_'.DB_NAME.'.sql.gz'; shell_exec($command); ?>
PASOS A SEGUIR PARA CONFIGURAR LOS BACKUPS
Por tanto, los pasos a seguir son:
- Crear en el directorio raíz el nuevo directorio «backups«
- Crear dentro de este nuevo directorio otro llamado «scripts» (para tenerlo todo ordenado)
- Crear dentro de «scripts» el fichero «backup.php» (llámalo como quieras…)
- Pegar el código arriba expuesto, tal cual.
- Dar permisos de ejecución (744 está bien)
- Crear el cronjob para que ejecute el archivo recién creado (home/user/backups/scripts/backup.php)

Nota: recuerda que «user» es el usuario del CPanel. Personaliza el tuyo a la hora de programarlo sino no funcionará…
Explicación del código:
#!/usr/bin/php
Indica al sistema que es un archivo php ejecutable por consola y que el ejecutable de php está en dicha ruta (verifica la de tu servidor)
$ruta = trim ( shell_exec('echo $HOME'), " \t\n\r\0\x0B");
Crea una variable donde se almacena la ruta del directorio HOME de tu usuario en el sistema, sin espacios, saltos de línea, etc…
include($ruta.'/public_html/wp-config.php');
Recuperamos el archivo de configuración de wordpress. Normalmente se encuentra en el directorio raíz (public_html). Si en tu caso es diferente, modifícalo. En dicho archivo están guardados los datos de configuración de la base de datos.
$command = 'mysqldump -u'.DB_USER.' -p'.DB_PASSWORD.' '.DB_NAME.' | gzip > '.$ruta.'/backups/backup_$(date +\%Y-\%m-\%d_\%H:\%Mh)_basededatos_'.DB_NAME.'.sql.gz';
Creamos una variable «command» donde almacenaremos el comando que vamos a ejecutar desde la línea de comandos. Aquí es donde se usarán las variables y constantes que hemos obtenido previamente.
shell_exec($command);
Por último, ejecutamos el comando.
Gracias por esta guía y las anterior de archivos porque ya se hacer backups automáticos, lo que me sucede en esta de BD es lo siguiente;
sh: -c: line 0: syntax error near unexpected token `)’
sh: -c: line 0: `mysqldump -uXXXX -pXXXXX XXXXX | gzip > /home/XXXXX/backups/backup_$(date +\%Y-\%m-\%d_\%H:\%Mh)_basededatos_XXXXXX.sql.gz’
X-Powered-By: PHP/7.4.4
Content-type: text/html; charset=UTF-8
Me salta este error como reporte en el correo y no se hace efectiva la copia.
Gracias por toda la ayuda de este blog.
Me da la sensación de que hay algún problema con las comillas. La primera comilla es diferente a la última. La función que usa los paréntesis no debe dar problemas en php 7.4. Con la información que indicas no tengo más datos. Espero que puedas solucionarlo. Si ves que se complica la cosa puedes cambiar el nombre del fichero y ponerle uno estático de manera que te ahorres un posible error en la función date (elimina ‘$(date +\%Y-\%m-\%d_\%H:\%Mh)’).
Gracias por tu comentario.
Daniel! Si no consigues solucionarlo con el comentario anterior se me ocurre que el error es más «tonto» de lo que parece… TU CONTRASEÑA CONTIENE UN PARENTESIS!
Ahí lo dejo.