Usuarios en línea
- bytecoders
He estado haciendo unas pequeñas modificaciones al script de backup para drupal para que podamos ejecutarlo en modo batch y así programarlo como una tarea más de cron para hacer backups diarios, semanales, ... en definitiva ir guardando copias de la información de manera regular (eso que tanto se nos olvida).
Se ha adaptado para que en lugar de mostrar la información por pantalla nos lo guarde en un fichero de log que nos será posteriormente remitido vía e-mail, se han incluido las configuraciones de passwords para acceder a la base de datos y así no es necesario introducirlos cada vez que se ejecuta el script. Como añadido podemos poner una quota, para que cuando tengamos más de X ficheros de backup nos elimine el más antiguo para no tener un número excesivo de backups en disco.
En definitiva ha quedado tal que así:
#!/bin/bash # # fullsitebackup.sh V1.0 # # Full backup of website files and database content. # # A number of variables defining file location and database connection # information must be set before this script will run. # Files are tar(ed) from the root directory of the website. All files are # saved. The MySQL database tables are dumped without a database name and # and with the option to drop and recreate the tables. # # Parameters: # tar_file_name (optional) # # Configuration # # Database connection information dbname=nombre_db # (e.g.: dbname=drupaldb) dbhost=host_para_la_bd dbuser=usuario_para_la_bd # (e.g.: dbuser=drupaluser) dbpassword=password_para_la_bd # Website Files webrootdir=/path/al/drupal # (e.g.: webrootdir=/home/user/public_html) # # Variables # # Default TAR Output File Base Name tarnamebase=sitebackup- datestamp=`date +'%Y-%m-%d'` # Execution directory (script start point) startdir=/directorio/de/los/ficheros/backup # Temporary Directory tempdir=tmpbckdir$datestamp # Maximum number of backup files max_files=20 # Admin email and subject, to send email log subject="fullsitebackup.sh_V1.0" email_adress="usuario@dominio.com" # # Input Parameter Check # if test "$1" = "" then tarname=$tarnamebase$datestamp.tgz else tarname=$1 fi # # Banner # echo "" > $startdir/backup.log echo "fullsitebackup.sh V1.0" >> $startdir/backup.log prevdir=`pwd` cd $startdir # # Check if we have rached the file quota # echo "" >> $startdir/backup.log echo "Checking if we have reached quota:" >> $startdir/backup.log total_files=`ls $startdir/sit* | wc -l` if [ $total_files = $max_files ]; then oldest_file=`ls $startdir/sit* | sort | head -1` echo "Quota reached: limit $max_files files" >> $startdir/backup.log echo "Deleting oldest file: $oldest_file" >> $startdir/backup.log rm $oldest_file else echo "Not yet: $total_files backup files in disk" >> $startdir/backup.log fi # # Create temporary working directory # echo " .. Setup" >> $startdir/backup.log mkdir $tempdir echo " done" >> $startdir/backup.log # # TAR website files # echo " .. TARing website files in $webrootdir" >> $startdir/backup.log cd $webrootdir tar cf $startdir/$tempdir/filecontent.tar . echo " done" /data/drupal_backup/sitebackup-2007-11-10.tgz # # sqldump database information # echo " .. sqldump'ing database:" >> $startdir/backup.log echo " user: $dbuser; database: $dbname; host: $dbhost" cd $startdir/$tempdir mysqldump -p --user=$dbuser --password=$dbpassword --host=$dbhost --add-drop-table $dbname > dbcontent.sql echo " done" >> $startdir/backup.log # # Create final backup file # echo " .. Creating final compressed (tgz) TAR file: $tarname" >> $startdir/backup.log tar czf $startdir/$tarname filecontent.tar dbcontent.sql echo " done" >> $startdir/backup.log # # Cleanup # echo " .. Clean-up" >> $startdir/backup.log cd $startdir rm -r $tempdir echo " done" >> $startdir/backup.log # # Exit banner # echo " .. Full site backup complete" >> $startdir/backup.log echo "" >> $startdir/backup.log cd $prevdir # # Send Report # mail -s $subject $email_adress < $startdir/backup.log echo " .. Full site backup complete"
Podéis usar el script original para restaurar el backup, aunque esperemos que los backups sean tan solo un refuerzo de la seguridad de nuestro sitio y no tengamos que echarle mano.
Espero que os sea de utilidad, es posible que próximamente haga algunas modificaciones para añadir avisos por SMS usando la API de Google y la clase java EnviaSMS proporcionada por Ivan López, que he estado probando últimamente y sobre la cuál quisiera decir que funciona perfectamente.