viernes, 5 de junio de 2015

Crontab cada 2 semanas

Esta tarea se ejecuta todos los sábados cada 2 semanas;

# crontab -e
59 22 * * 6 `date +\%W` \% 2 > /dev/null || /root/scripts/reboot.sh

Más detallado lo que hace es lo siguiente:

59 -> Minutos

22 -> Hora

6   -> Sábado (día de la semana)

`date +\%W` \% 2 -> Date con  el +W devuelve la semana del año, por ejemplo esta es la número 22 del año, el %2 es para verificar si es par, es decir que una semana lo ejecuta y la otra no.

Envía el resultado en /dev/null y ejecuta el comando  /root/scripts/reboot.sh si es verdadero el resultado.

No se olviden de poner el \ delante de los % porque sino no funciona en el crontab.

martes, 14 de abril de 2015

Cambiar el reloj de hardware y que el linux lo tome

Cambio el reloj de hardware:
root@linuxirigillo:/etc# hwclock --set --date "14 Apr 2015 08:41"

Verifico el cambio hecho:
root@linuxirigillo:/etc# hwclock
Tue 14 Apr 2015 08:41:09 AM GMT-3  -0.484876 seconds

Se lo asigno al Sistema Operativo:
root@linuxirigillo:/etc# hwclock -s

lunes, 19 de enero de 2015

Ver fecha de acceso en access.log del Squid



Por ejemplo si queremos ver el acceso de los usuario al squid a las 8:15 del día Lunes 19 de Enero del año actual:

# cat /var/log/squid/access.log | perl -pe 's/(\d+)/localtime($1)/e' | grep "Mon Jan 19 08:15"

viernes, 5 de diciembre de 2014

Expiró licencia de VMware 5.5 free

mv /etc/vmware/license.cfg /etc/vmware/license.cfg.05-12-2014
cp /etc/vmware/.#license.cfg /etc/vmware/license.cfg
/etc/init.d/vpxa restart

restart el VMware server

miércoles, 26 de noviembre de 2014

Balanceo de Carga y Alta Disponibilidad en un Webserver con Apache y Perl (versión 2)



En este enlace http://redes-seguridad.blogspot.com.ar/2014/07/balanceo-de-carga-y-alta-disponibilidad.html les mostré como hacer el balanceo aleatorio entre 2 webservers, detectaba si uno de ambos estaba caído enviaba las peticiones web's al otro:

Pero quedaba pendiente verificar el "CPU load" antes de hacer la redirección y basarse en la carga en vez de redireccionar aleatoria-mente. Con esta última versión del script cubrimos ese tema:


Escenario:

Tenemos 2 servidores web, cada uno escuchando en el mismo puerto la misma aplicación.

El script irá distribuyendo al webServer que tenga menor "Carga de CPU", en caso que alguno tenga el puerto bajo, es decir que la aplicación esté baja reenviará las peticiones al webserver que esté arriba.

Es decir, pueden ocurrir las diferentes situaciones:

1) Ambos servidores UP y con la aplicación ok, testea al de menor uso de CPU y redirige la petición a este.
2) Servidor1 caído ó la aplicación DOWN => redirecciona al Servidor2.
3) Servidor2 caído ó la aplicación DOWN => redirecciona al Servidor1.
4) Ambos Servidores caidos, en mi caso no hago nada, pero puedo mostrar algún mensaje que deseen.



Script:


#!/usr/bin/perl

##Descomentar la siguiente linea si desea ver lo que hace en vez de ejecutar la redirección:
#print "content-type: text/html \n\n";

##Escanea al WebServer1 el puerto 80 y verifica si está abierto, guarda en la variable $VAL1 si el comando fue correcto ó no:
$result1 = `nmap -sT -P0 WebServer1-p 80|grep open`;
$VAL1=$?;

##Escanea al WebServer2 el puerto 80 y verifica, idem al anterior, pero guarda el valor en $VAL2:
$result2 = `nmap -sT -P0 WebServer2 -p 80|grep open`;
$VAL2=$?;

##Concatena los valores de $VAL1 y $VAL2 en $VAL:
$VAL=$VAL1.$VAL2;

##Descomento las siguientes líneas si deseo ver los valores que obtienen las variables, recuerde que también debe descomentar la línea del conten-type que aparece al inicio del script:
#print "VAL1: ", $VAL1, "";
#print "VAL2: ", $VAL2, "";
#print "VAL:   ", $VAL,   "";

##Para pruebas hardcodeadas modificar y descomentar las siguientes variables:
## El valor 00     => ambos servidores escuchan, ver por CPU cual es el de menor uso
## El valor 0256   => redirige a WebServer01 (WebServer01 caido)
## El valor 2560   => redirige a WebServer02 (JDE05 caido)
## El valor 256256 => ambos webservers caido
#$VAL="00";
use Switch;
switch ($VAL)
{
 case "00"
 {
  ##Tener en cuenta que con el usuario de root no funciona, por eso utilicé el de apache, recuerde generar las keys ssh para el usuario www-data:
  my $CPU_SERVER1 = `ssh www-data'\@'ServerNagios /ruta/al/script/de/nagios/libexec/check_nt -H WebServer1 -v CPULOAD -l 5,80,90 | cut -d' ' -f3 | cut -d'%' -f1`;

  my $CPU_SERVER2 = `ssh www-data'\@'ServerNagios /ruta/al/script/de/nagios/libexec/check_nt -H WebServer2 -v CPULOAD -l 5,80,90 | cut -d' ' -f3 | cut -d'%' -f1`;

  ##Descomentar si desea ver valores, recuerde descomentar la content-type al inicio del script
  #print "SERVER1: ", $CPU_SERVER1, " ";
  #print "SERVER2: ", $CPU_SERVER2, " ";

  ##Evalua quien tene menor uso de CPU: 
  if ( $CPU_SERVER1 > $CPU_SERVER2)
  {
   ##Tener en cuenta que esto redirecciona, si descomenta el content-type lo mostrará por pantalla   
   print "Location: http://WebServer2:80/aplicacion\n\n";
  }
  else
  {
   ##Tener en cuenta que esto redirecciona, si descomenta el content-type lo mostrará por pantalla   
   print "Location: http://WebServer1:80/aplicacion\n\n";
  }
 }
 case "0256"    { print "Location: http://WebServer1:80/aplicacion\n\n"; }
 case "2560"    { print "Location: http://WebServer2:80/aplicacion\n\n"; }
 case "256256"  { print "Ningun webserver (WebServer1 y WebServer2) escucha en el puerto 80" }
 else           { print "Valor no contemplado en el Perl de Load Balance" }
}

viernes, 31 de octubre de 2014

Script para Restore de informix con ontape y expect en Solaris

#!/opt/csw/bin/expect -f
set timeout -1
spawn /usr/local/apps/informix/bin/ontape -r
expect "Please mount tape 1 on /ruta/de/informix/bkp.full and press Return to continue ..."
send -- "\r"
expect "Continue restore? (y/n)"
send -- "y\r"
expect "Do you want to back up the logs? (y/n)"
send -- "n\r"
expect "Restore a level 1 archive (y/n)"
send -- "n\r"
expect "Do you want to restore log tapes? (y/n)"
send -- "n\r"
expect eof

Reinstalando expect on solaris 10 -bash: /usr/local/bin/expect: Invalid argument

Al obtener el siguiente error y no poder arreglarlo:

server pkg# expect
-bash: /usr/local/bin/expect: Invalid argument


Me decidí a reistalarlo, buscamos el paquete con pkgutil:
(Si no tenemos instalado pkgutil consultar en este enlace: http://redes-seguridad.blogspot.com.ar/2012/05/instalar-paquetes-y-dependencias.html)

server pkg# /opt/csw/bin/pkgutil -a expect
=> Fetching new catalog and descriptions (http://mirror.opencsw.org/opencsw/testing/i386/5.10) if available ...
==> 3612 packages loaded from /var/opt/csw/pkgutil/catalog.mirror.opencsw.org_opencsw_testing_i386_5.10
common               package              catalog                        size
expect               CSWexpect            5.45,REV=2013.04.10        218.6 KB
pm_expect            CSWpm-expect         1.21,REV=2013.08.18         49.7 KB
pm_expect_simple     CSWpm-expect-simple  0.04,REV=2013.08.18         14.3 KB
py_pexpect           CSWpy-pexpect        2.3,REV=2013.09.10          68.0 KB


Lo instalamos:

server pkg# /opt/csw/bin/pkgutil -i CSWexpect
Solving needed dependencies ...
Solving dependency order ...
1 CURRENT packages:
        CSWcommon-1.5,REV=2010.12.11
Install 4 NEW packages:
        CSWexpect-5.45,REV=2013.04.10 (opencsw/testing)
        CSWlibtcl8-5-8.5.15,REV=2013.10.09 (opencsw/testing)
        CSWsunmath-2007.08.04 (opencsw/testing)
        CSWtcl8-tclmodules-8.5.15,REV=2013.10.09 (opencsw/testing)
Total size: 2.2 MB
4 packages to fetch. Do you want to continue? ([y],n,auto)
=> Fetching CSWsunmath-2007.08.04 (1/4) ...
=> Fetching CSWtcl8-tclmodules-8.5.15,REV=2013.10.09 (2/4) ...
...
...
Installation of was successful.


Lo ejecutamos:

server pkg# /opt/csw/bin/expect