crontab para dias impares y pares
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
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
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
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/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/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
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
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
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
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
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
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.