crontab para dias impares y pares

Aldrin Martoq amartoq en dcc.uchile.cl
Mar Dic 9 16:18:33 CLST 2008


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:

amartoq en videopodcast:~$ crontab -l
# m h  dom mon dow   command
0-59/2 * * * * echo par $(date) >> /tmp/test
1-59/2 * * * * echo impar $(date) >> /tmp/test
amartoq en videopodcast:~$ 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 <amartoq en dcc.uchile.cl>
http://aldrin.martoq.cl/videopodcast/
------------ próxima parte ------------
Se ha borrado un mensaje que no está en formato texto plano...
Nombre     : no disponible
Tipo       : application/pgp-signature
Tamaño     : 197 bytes
Descripción: This is a digitally signed message part
Url        : http://listas.inf.utfsm.cl/pipermail/linux/attachments/20081209/e04c4654/attachment.bin


Más información sobre la lista de distribución Linux