jueves, 17 de enero de 2019

Crear script para respaldo de base de datos PostgreSQL

Similar al post script para respaldo de bases de datos de MySQL podemos generar un bash en nuestro servidor para que genere un respaldo de nuestra base de datos deseada y posteriormente con el cron crear nuestra tarea automatizada.

Creamos un archivo con extensión .sh en la carpeta que deseemos, el script es el siguiente (le llamaremos /home/miusuario/scripts/backup.sh):

#!/bin/bash
# variables
directorio="/home/respaldos/postgresql";
database="dbbasedatos";
fecha="`date +%Y%m%d%H%M%S`";
usuario="miusuario"
host="11.1.1.1"
export PGPASSWORD=miclave

# generar el dump y crear el log
pg_dump -U $usuario -h $host -F t -d $database|gzip -9 > $directorio/$fecha.tar.gz && echo 'Respaldo realizado con exito.' >> $directorio/bitacora.log;

Aquí una breve explicación:
#Nuestras variables
directorio: el directorio donde generaremos nuestros respaldos.
database: la base de datos a respaldar.
fecha: la fecha y hora actual que la concatenaremos con nuestro nombre de archivo.
usuario: el usuario de postgresql para generar el respaldo (debe tener permisos sobre nuestra base).
host: servidor de base de datos, aquí muy importante si nuestro usuario no tiene acceso al host de localhost nos mostrara un error, deben verificar con que host fue creado.

#Nuestros comandos
export PGPASSWORD: la contraseña de nuestro usuario, en caso de no tener contraseña omitir esta linea.

Ahora viene nuestro comando que realiza toda la operación, para mas detalle puede consultar pg_dump --help a través de la consola.
-U el nombre de usuario
-h el servidor de base de datos
-F t el formato de salida, para nuestro caso es tar
-d la base de datos a respaldar
gzip -9 comprime nuestra salida con el parámetro de la mejor compresión
$directorio/$fecha.tar.gz con nuestros parametros de las variables es donde se generara nuestro respaldo (p.e. /home/respaldos/postgresql/1701191257.tar.gz).

Nota: si nuestro usuario no tiene contraseña, podemos agregar el parámetro de -w (o bien --no-password) a la linea de nuestro comando pg_dump.

Para probarlo podemos ejecutar nuestro bash y ver nuestro resultado.

$ sh backup.sh
Hasta este punto no debería existir algún problema, solo faltaría crear nuestro cron para automatizar nuestra tarea:

$ crontab -e 

nuestras lineas:

10 1 * * * /home/respaldos/scripts/backup.sh 1> /dev/null 2> /home/respaldos/errores.log

 y listo hemos terminado.

martes, 15 de enero de 2019

Comprobar la ejecución de un CRON y guardar el log

Muchas veces cuando creamos un CRON necesitamos saber si la tarea se ejecutará correctamente o contiene errores, debido a que no se ejecuta en una consola visible, no podemos saber el resultado una vez que se pone en marcha. Para ello mostraremos algunos trucos que podemos usar.

Guardar la salida en un log

Con esta opción solo se guardaran los errores que se generen en un archivo que seleccionemos:

* * * * * /home/miusuario/script 1> /dev/null 2> /home/miusuario/logs/archivo.log

Hay que recordar los números de la salida (redireccionamiento con el simbolo >):
  • 0 stdin (standard input): el comando
  • 1 stdout (standard output): /dev/null la salida se descarta
  • 2 stderr (standard error): /home/miusuario/logs/archivo.log la ruta y el archivo de log.
Con esta otra opción guardaremos tanto la salida como los errores:

* * * * * /home/miusuario/script &> /home/miusuario/logs/archivo.log

Enviar el resultado por email

Es similar a la anterior pero envía la información a un correo predeterminado.


* * * * * /home/miusuario/script 1> /dev/null 2>&1 | mail  -s "Errores del cron" correo@correo.com

Cabe mencionar que para ello debe estar instalado y configurado correctamente el comando mail.

Simular el entorno de ejecución

Esta opción permite ejecutar un cron en el momento que deseemos

$ env -i /home/miusuario/script

De esta forma no tenemos que esperar hasta cuando se ejecute de acuerdo a lo programado, podemos realizar las pruebas que sean necesarias en un entorno similar a las que hace el cron.

lunes, 22 de octubre de 2018

Actualizar PHP 5 a 7 en CentOs 6

El repositorio oficial del CentOs 6 tiene hasta la versión PHP 5.3.3 por lo cual no es posible actualizar desde este mismo, así que para ello utilizaremos los repositorio Remi y EPEL, donde vienen las versiones 7.0, 7.1, 7.2 y 7.3 con sus extensiones.

1. Agregar los repositorios del PHP7

# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
# yum install http://rpms.remirepo.net/enterprise/remi-release-6.rpm

2. Instalar la colección de utilidades del yum

# yum install yum-utils
Esta es una colección de utilidades y plugins que extienden y complementan a yum

3. Habilitar el repositorio de Remi

Dependiendo la versión que deseas instalar, es el repositorio que tienes que habilitar

# yum-config-manager --enable remi-php70   [Install PHP 7.0]
# yum-config-manager --enable remi-php71   [Install PHP 7.1]
# yum-config-manager --enable remi-php72   [Install PHP 7.2]

4. Instalar la versión del PHP 7

# yum install php php-mcrypt php-cli php-gd php-curl php-mysql php-ldap php-zip php-fileinfo
5. Reiniciamos el servicio

# service httpd restart
6. Comprobamos nuestra versión y listo

# php -v
PHP 7.2.11 (cli) (built: Oct 10 2018 10:17:37) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.11, Copyright (c) 1999-2018, by Zend Technologies

miércoles, 24 de agosto de 2016

Renovar periodo de gracias de las licencias Terminal Server en Windows Server 2012

En Windows Server 2012 al tener instaladas las licencias de Terminal Server solo se nos dan por defecto 120 días de periodo de gracia, de ahi tendremos que adquirir nuestras licencias definitivas. Cuando esto ocurre, se muestra el siguiente error:

Licensing mode for the Remote Desktop Session Host is not configured

Existe una forma de reiniciar este periodo de gracia, he aquí los pasos a seguir:

1. Ejecutar el regedit

2. Buscar la entrada GracePeriod en la siguiente ruta:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\RCM

3. Damos click con el botón derecho en la entrada GracePeriod y seleccionamos permisos, damos el control total al grupo de administradores para poder eliminar esta entrada.

4. Eliminamos la entrada y reiniciamos nuestro servidor

5. Con esto tendremos 120 días más de periodo de gracia.

martes, 31 de mayo de 2016

Instalar wkhtmltopdf

La herramienta wkhtmltopdf nos permite generar el PDF de una pagina html, muy útil si queremos generar reportes PDF de nuestros sistemas, es gratuita asi que mas conveniente para su uso. La instalación es algo complicada ya que no existe mucha documentación al respecto pero al final resulto con éxito, he aquí describo los pasos que me funcionaron:

1. Instalar dependencias previas

Centos
# yum install -y xorg-x11-fonts-75dpi
# yum install -y xorg-x11-fonts-Type1

Ubuntu
# apt-get install xfonts-75dpi

2. Instalar la libreria wkhtmltopdf

Anteriormente se podía instalar directo de sourceforge (downloads.sourceforge.net) pero actualmente la version 0.12.5 wkhtmltopdf tiene su propio repositorio:

Centos 6
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos6.i686.rpm
Centos 7
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.i686.rpm
Ubuntu 14.04
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.trusty_i386.deb
Ubuntu 16.04
wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.xenial_i386.deb

Solo hay que seleccionar el archivo .rpm o .deb adecuado a nuestra versión del linux y la arquitectura correcta, podemos checar el listado en:

https://wkhtmltopdf.org/downloads.html

Una vez descargado el archivo procederemos a instalarlo

Centos 6
rpm -Uvh wkhtmltox-0.12.5-1.centos6.i686.rpm

Ubuntu 16.04
dpkg -i wkhtmltox_0.12.5-1.xenial_i386.deb

3. Realizar una prueba

Una vez que lo tengamos instalado para probarlo, bastara con teclear el comando y como parametro poner la url de la pagina que queremos convertir

$ wkhtmltopdf http://www.google.com.mx miarchivo.pdf

Si todo funciona correctamente nos debe entregar un informe de lo realizado y el archivo PDF generado:

Loading pages (1/6)
Counting pages (2/6) 
Resolving links (4/6) 
Loading headers and footers (5/6) 
Printing pages (6/6)
Done

En la carpeta donde hayamos ejecutado el comando tendremos nuestro archivo PDF. Esta misma librería la podemos utilizar con PHP, pero eso lo dejamos para otro post.

Entradas Populares