crontab para dias impares y pares

2008-12-09 Por tema Victor Hugo dos Santos
estimados,

estoy configurando un par de servidores (aca pink y blue) que quiero
que intercambie papeles diariamente, o sea..
 - los dias pares se detengan todos los servicios en blue y que se
activen todos los servicios en pink
 - los dias impares se activen todos los servicios en blue y que se
detengan todos los servicios en pink

bueno.. para esto, puse estas lineas en los archivos /etc/crontab de
cada servidor

crontab servidor BLUE
 01 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh bajar
 10 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh subir

crontab servidor PINK
 01 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh bajar
 10 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh subir


pero como se puede observar en los logs

log servidor BLUE
 $ sudo cat /var/log/cron* | grep todas | sort
 Dec  3 00:10:01 blue crond[4524]: (root) CMD
(/home/victor/scripts/finales/todas_tareas.sh subir)
 Dec  5 00:10:01 blue crond[22656]: (root) CMD
(/home/victor/scripts/finales/todas_tareas.sh subir)
 Dec  7 00:10:01 blue crond[3750]: (root) CMD
(/home/victor/scripts/finales/todas_tareas.sh subir)
 Dec  9 00:10:01 blue crond[18781]: (root) CMD
(/home/victor/scripts/finales/todas_tareas.sh subir)


log servidor PINK
 $ sudo cat /var/log/cron* | grep todas | sort
 Dec  3 00:01:01 pink crond[23335]: (root) CMD
(/home/victor/scripts/finales/todas_tareas.sh bajar)
 Dec  5 00:01:01 pink crond[26593]: (root) CMD
(/home/victor/scripts/finales/todas_tareas.sh bajar)
 Dec  7 00:01:01 pink crond[30791]: (root) CMD
(/home/victor/scripts/finales/todas_tareas.sh bajar)
 Dec  9 00:01:01 pink crond[1044]: (root) CMD
(/home/victor/scripts/finales/todas_tareas.sh bajar)

en ambos servidores, solo me estan funcionando las tareas en los dias
impares !!! :-(

imagino que sea algo con la sintax del crontab..
intente en algún momento, poner 01 0 0-32/2 * * root pero me acusaba
error de syntax (no existe el dia 0 en el calendario, plop)..
ahora tengo como he mostrado mas arriba y no me salen error de
sintaxis al ejecutarlo y por ende entiendo que debería de estar bien..
pero no me funciona !! :-(

alguna sugerencia ??

es un RHEL 5.2 con todas las actualizaciones.. y estas son las
versiones de los softwares:
 vixie-cron-4.1-72.el5
 anacron-2.3-45.el5
 crontabs-1.10-8

salu2 y gracias


-- 
-- 
Victor Hugo dos Santos
Linux Counter #224399



Re: crontab para dias impares y pares

2008-12-09 Por tema Juan Manuel Doren
y si en vez de poner 1-32/2 pones 1,3,5,7,...31?


 bueno.. para esto, puse estas lineas en los archivos /etc/crontab de
 cada servidor


 en ambos servidores, solo me estan funcionando las tareas en los dias
 impares !!! :-(


Re: crontab para dias impares y pares

2008-12-09 Por tema Aldrin Martoq
On Tue, 2008-12-09 at 14:40 -0300, Victor Hugo dos Santos wrote:
 estoy configurando un par de servidores (aca pink y blue) que quiero
 que intercambie papeles diariamente, o sea..
  - los dias pares se detengan todos los servicios en blue y que se
 activen todos los servicios en pink
  - los dias impares se activen todos los servicios en blue y que se
 detengan todos los servicios en pink

Hmm y si se cae el servicio, cual máquina levantas? Se puede saber cual
es el objeto de esto?

 bueno.. para esto, puse estas lineas en los archivos /etc/crontab de
 cada servidor
 crontab servidor BLUE
  01 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh bajar
  10 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh subir
 crontab servidor PINK
  01 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh bajar
  10 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh subir

Es extraño, porque esto funciona perfectamente aca:

[EMAIL PROTECTED]:~$ crontab -l
# m h  dom mon dow   command
0-59/2 * * * * echo par $(date)  /tmp/test
1-59/2 * * * * echo impar $(date)  /tmp/test
[EMAIL PROTECTED]:~$ tail -f /tmp/test
par Tue Dec 9 15:54:02 CLST 2008
impar Tue Dec 9 15:55:01 CLST 2008
par Tue Dec 9 15:56:01 CLST 2008

Una opción es que dejes explícitamente los días en que correrá, algo
como esto:

BLUE
01 0 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 * * root bajar.sh
10 0 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 * * root subir.sh
PINK
01 0 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 * * root bajar.sh
10 0 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 * * root subir.sh


Ojo que en los meses con # días impares, BLUE hará la pega 2 días
seguidos: el 31 y el 1 del mes siguiente por ejemplo. Si esto es un
problema, puedes utilizar este script para saber si un día es par o no,
desde una fecha fija (el epoch):

-
#!/bin/bash

python EOF
import datetime
epoch = datetime.datetime.utcfromtimestamp(0)
today = datetime.datetime.utcnow()
d = today - epoch
exit((d.days % 2) == 0)
EOF

if [ $? == 0 ]; then
echo $? PINK
exit 0
else
echo $? BLUE
exit 0
fi
--

Ojo: usar date +%s y dividirlo por 86400 _no es lo mismo_!
 
-- 
Aldrin Martoq [EMAIL PROTECTED]
http://aldrin.martoq.cl/videopodcast/


signature.asc
Description: This is a digitally signed message part


Re: crontab para dias impares y pares

2008-12-09 Por tema Alvaro Herrera
Victor Hugo dos Santos escribió:

 bueno.. para esto, puse estas lineas en los archivos /etc/crontab de
 cada servidor
 
 crontab servidor BLUE
  01 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh bajar
  10 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh subir
 
 crontab servidor PINK
  01 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh bajar
  10 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh subir

Hmm :-(  Si encuentras como hacerlo, por favor cuenta, porque yo también
necesito hacer algo parecido (mi solución fue hacer una lista
exhaustiva, como sugirieron en otras respuestas)

-- 
Alvaro Herrera  Developer, http://www.PostgreSQL.org/
La verdad no siempre es bonita, pero el hambre de ella sí


Re: crontab para dias impares y pares

2008-12-09 Por tema Alejandro Weinstein
2008/12/9 Aldrin Martoq [EMAIL PROTECTED]:
 -
 #!/bin/bash

 python EOF
 import datetime
 epoch = datetime.datetime.utcfromtimestamp(0)
 today = datetime.datetime.utcnow()
 d = today - epoch
 exit((d.days % 2) == 0)
 EOF

 if [ $? == 0 ]; then
echo $? PINK
exit 0
 else
echo $? BLUE
exit 0
 fi
 --

Cual es la ventaja de tener este script hibrido? Porque no hacer
todo en Python?

Alejandro.


Re: crontab para dias impares y pares

2008-12-09 Por tema Victor Hugo dos Santos
2008/12/9 Aldrin Martoq [EMAIL PROTECTED]:
 On Tue, 2008-12-09 at 14:40 -0300, Victor Hugo dos Santos wrote:

[...]

 Hmm y si se cae el servicio, cual máquina levantas? Se puede saber cual
 es el objeto de esto?

se cae el servicio (cosa que no debería de ocurrir) hay alarmas que
son enviadas a los encargados y éstes deben de proceder manualmente.

suponiendo que se caiga a las 11:40 PM ... bueno, dependendo del dia
(par o impar) se llevantara una de las maquinas !!! :-)

son servidores replicados, que quiero que funcione
aleatoriamente...para tener garantia que ambos ambiente funcionen
correctamente a diario.. y no tener sorpresas en el futuro.

 bueno.. para esto, puse estas lineas en los archivos /etc/crontab de
 cada servidor

[...]

 Es extraño, porque esto funciona perfectamente aca:

 [EMAIL PROTECTED]:~$ crontab -l
 # m h  dom mon dow   command
 0-59/2 * * * * echo par $(date)  /tmp/test
 1-59/2 * * * * echo impar $(date)  /tmp/test
 [EMAIL PROTECTED]:~$ tail -f /tmp/test
 par Tue Dec 9 15:54:02 CLST 2008
 impar Tue Dec 9 15:55:01 CLST 2008
 par Tue Dec 9 15:56:01 CLST 2008

siii.. por aca, con los minutos funciona impeque tambien !!!
probé durante mucho tiempo con las horas y minutos antes de cambiar el
crontab para funcionar en base al dia del mes !!! y fue entonces, que
apareció el error.

 Una opción es que dejes explícitamente los días en que correrá, algo
 como esto:

 BLUE
 01 0 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 * * root bajar.sh
 10 0 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 * * root subir.sh
 PINK
 01 0 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 * * root bajar.sh
 10 0 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 * * root subir.sh

queda muy grande la lista de parámetros !!!
es mas propenso a fallos y me complica contar de 2 en 2 después del 10 !!!  ;-)


 Ojo que en los meses con # días impares, BLUE hará la pega 2 días
 seguidos: el 31 y el 1 del mes siguiente por ejemplo. Si esto es un
 problema, puedes utilizar este script para saber si un día es par o no,
 desde una fecha fija (el epoch):

mmm.. esta es una muy buena observación !!!
pero no debería de influenciar en el funcionamiento (hay rutinas que
verifican si el proceso ya esta o no ejecutando en el servidor
actual).
Obs.: en el ejemplo de arriba que enviaste (con la gran lista de días)
también pasaría el mismo !!! creo que la unica salida (como tu mismo
mencionaste) es poner una función interna en el software/script


salu2 y atento.

-- 
-- 
Victor Hugo dos Santos
Linux Counter #224399



Re: crontab para dias impares y pares

2008-12-09 Por tema Jose Miguel Vidal Lavin
On Tue, 9 Dec 2008 16:57:05 -0300, Alvaro Herrera wrote
 Victor Hugo dos Santos escribió:
 
  bueno.. para esto, puse estas lineas en los archivos /etc/crontab de
  cada servidor
  
  crontab servidor BLUE
   01 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh bajar
   10 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh subir
  
  crontab servidor PINK
   01 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh bajar
   10 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh subir
 
 Hmm :-(  Si encuentras como hacerlo, por favor cuenta, porque yo también
 necesito hacer algo parecido (mi solución fue hacer una lista
 exhaustiva, como sugirieron en otras respuestas)
 

y no seria mejor ejecutar ese script con crontab todos los dias y que el
script determine si es dia par o impar con codigo bash o perl o lo que sea

mas sano dejar eso al script que a algo que no lo tiene contemplado

saludos

--
Cobranzas y Servicios Afines Limitada
www.sertotal.cl
[EMAIL PROTECTED]
02-6764600
Santiago
-



Re: crontab para dias impares y pares

2008-12-09 Por tema Eduardo Silva

 Hmm :-(  Si encuentras como hacerlo, por favor cuenta, porque yo también
 necesito hacer algo parecido (mi solución fue hacer una lista
 exhaustiva, como sugirieron en otras respuestas)

 --
 Alvaro Herrera  Developer,
 http://www.PostgreSQL.org/
 La verdad no siempre es bonita, pero el hambre de ella sí


Y si en el contrab llamaran un script con contenido:

check=$((`date +%_d` % 2))
if [ $check = 0 ]; then
echo es par
else
echo es impar
fi

luego dentro del if o else llaman al script  correspondiente...

saludos

-- 
Eduardo Silva
http://edsiper.linuxchile.cl


Re: crontab para dias impares y pares

2008-12-09 Por tema Juan Manuel Doren
 01 0 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 * * root bajar.sh
 10 0 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30 * * root subir.sh

 queda muy grande la lista de parámetros !!!
 es mas propenso a fallos y me complica contar de 2 en 2 después del 10 !!!  
 ;-)


el que está fallando es el otro :P

pero si, es mejor un script inteligente, pero ojo, que podrias querer
llamarlo a mano en un día que no corresponda a la regla



Re: crontab para dias impares y pares

2008-12-09 Por tema Aldrin Martoq
On Tue, 2008-12-09 at 13:05 -0700, Alejandro Weinstein wrote:
 2008/12/9 Aldrin Martoq [EMAIL PROTECTED]:
  -
  #!/bin/bash
  python EOF
  import datetime
  epoch = datetime.datetime.utcfromtimestamp(0)
  today = datetime.datetime.utcnow()
  d = today - epoch
  exit((d.days % 2) == 0)
  EOF
  if [ $? == 0 ]; then
 echo $? PINK
 exit 0
  else
 echo $? BLUE
 exit 0
  fi
  --
 Cual es la ventaja de tener este script hibrido? Porque no hacer
 todo en Python?

El script es suponiendo que el intercambio de máquinas debe ocurrir SI o
SI. La idea del código python era que supuestamente considera los leap
seconds, por eso decía que no era llegar y dividir por 86400...

http://en.wikipedia.org/wiki/Leap_second


Ahora, estuve jugando un poco con el código y no esta contemplando los
leap_seconds?! ...  Pero si no es de vida o muerte (y no se ejecuta
cerca de las 00:00 horas) no tendría por qué tener problemas ;)

On Tue, 2008-12-09 at 15:41 -0500, Eduardo Silva wrote:
 Y si en el contrab llamaran un script con contenido:
 check=$((`date +%_d` % 2))
 if [ $check = 0 ]; then
 echo es par
 else
 echo es impar
 fi

Te recomiendo dejar esa funcionalidad en un archivo aparte del subir.sh
y bajar.sh; y luego haces source (así se decía en tcsh, en bash es .
o punto). Ej:


--/etc/scripts/valida.sh---ini---
#!/bin/bash

# configurar DIA=0 o DIA=1 según máquina
DIA=0

if [ $[ $(date +%s) / 86400 % 2 ] = $DIA ]; then
logger $0: HOY NO ME TOCA!
exit 0
fi
logger $0: validacion de dia ok, prosigue
--/etc/scripts/valida.sh---fin---



Y en el script de subir:
--/foo/bar/subir.shini
#!/bin/bash

# validacion ejecucion script
. /etc/scripts/valida.sh

# resto del script
foo bar etc etc etc
---/foo/bar/subir.sh---fin---



-- 
Aldrin Martoq [EMAIL PROTECTED]
http://aldrin.martoq.cl/videopodcast/


signature.asc
Description: This is a digitally signed message part


Re: crontab para dias impares y pares

2008-12-09 Por tema Yonathan Dossow
On Tue, 2008-12-09 at 13:05 -0700, Alejandro Weinstein wrote:
 2008/12/9 Aldrin Martoq [EMAIL PROTECTED]:
  -
  #!/bin/bash
 
  python EOF
  import datetime
  epoch = datetime.datetime.utcfromtimestamp(0)
  today = datetime.datetime.utcnow()
  d = today - epoch
  exit((d.days % 2) == 0)
  EOF
 
  if [ $? == 0 ]; then
 echo $? PINK
 exit 0
  else
 echo $? BLUE
 exit 0
  fi
  --
 
 Cual es la ventaja de tener este script hibrido? Porque no hacer
 todo en Python?

tambien puede ser todo en bash:

#!/bin/bash

_par=$(($(date +%-d)%2))

if [ $_par -eq 0 ]; then
echo es par
else
echo es impar
fi


 
 Alejandro.
 
-- 
Yonathan H. Dossow Acun~a  http://2o.cl
Estudiante Ingenieria Civil Informatica
Unidad de Servicios de Computacion e Internet  Fono: +56 32 2654367
Universidad Tecnica Federico Santa Maria  Valparaiso, Chile


signature.asc
Description: This is a digitally signed message part


Re: crontab para dias impares y pares

2008-12-09 Por tema Renato Covarrubias Romero
El Martes, 9 de Diciembre de 2008, Alvaro Herrera Herrera escribió:
 Victor Hugo dos Santos escribió:
  bueno.. para esto, puse estas lineas en los archivos /etc/crontab de
  cada servidor
 
  crontab servidor BLUE
   01 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh
  bajar 10 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh
  subir
 
  crontab servidor PINK
   01 0 1-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh
  bajar 10 0 2-32/2 * * root /home/victor/scripts/finales/todas_tareas.sh
  subir

 Hmm :-(  Si encuentras como hacerlo, por favor cuenta, porque yo también
 necesito hacer algo parecido (mi solución fue hacer una lista
 exhaustiva, como sugirieron en otras respuestas)

En el man de crontab(5) dice:
23 0-23/2 * * * echo run 23 minutes after midn, 2am, 4am ..., everyday
Y por otro lado dice:
Ranges can include steps, so 1-9/2 is the same as 1,3,5,7,9.

Creo que es más menos lo que tienes tu...

1 0 1-31/2 * * root /script/dias/impares
10 0 0-30/2 * * root /script/dias/pares

Algo así, o no?

Saludos!

-- 
Renato Covarrubias Romero   counter.li.org  #399677
rcovarru [at] alumnos.inf.utfsm.clhttp://rnt.bla.cl
Estudiante Ingenieria Civil Informatica, Casa Central, UTFSM.
Coordinador Laboratorio de Computación, Casa Central.