Thread View: es.comp.os.linux.programacion
7 messages
7 total messages
Started by Seve
Mon, 05 Apr 2010 07:05
Problema script bash en cron
Author: Seve
Date: Mon, 05 Apr 2010 07:05
Date: Mon, 05 Apr 2010 07:05
116 lines
5109 bytes
5109 bytes
Hola
Necesito una ayudita :)
Queremos lanzar un script desde el cron en una Centos5. El script se
llama cada minuto y aunque habitualmente termina en cuestión de
segundos, hay veces que puede tardar varios minutos.
Como no nos interesa que el script se ejecute dos veces, hacemos un ps y
buscamos que no estuviera en ejecución. El problema que tenemos es que
cuando quiere da error porque el shell parece lanzarse dos veces y da un
"falso positivo".
Mosqueados, hemos hecho el sscript que pongo más abajo y lo hemos
colgado en el cron. Lo que hace es ver si está en el mismo nodo que en
el que corre apache (es un cluster). Si es el mismo, saca la lista de
procesos, busca su nombre, quita grep, se quita a sí mismo y si la lista
está vacía, supone que no está ya en ejecución y hace lo que tenga que
hacer (TEST_CRON.sh en este caso).
Entrada en cron:
* * * * * /usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh # Test
Script:
------------------
#!/bin/bash
#
servicio="apache"
LOG=/usr/bin/hvs/cron/cron_loglocal.log
dondeestoy=`/usr/sbin/clustat | /bin/grep Local | /bin/awk '{print $1}'`
dondeesta=`/usr/sbin/clustat -s apache | /bin/grep "service:$servicio" |
/bin/awk '{print $2}'`
/bin/echo "["`date "+%Y%m%d %H:%M:%S"`"] -1 Inicia $0" >> $LOG
if [ "$dondeestoy" == "$dondeesta" ]
then
procesos=`/bin/ps -ef|/bin/grep $0|/bin/grep -v grep|/bin/grep -v $$`
/bin/echo "["`date "+%Y%m%d %H:%M:%S"`"] -2 Antes procesos
($procesos)... $0" >> $LOG
if [ "$procesos" == "" ]
then
/bin/echo "["`date "+%Y%m%d %H:%M:%S"`"] -3 Se ejecuta $0" >> $LOG
/bin/sh /mnt/cluster/apache/cron/migrado/TEST_CRON.sh
fi
fi
/bin/echo "["`date "+%Y%m%d %H:%M:%S"`"] -4 Finaliza $0" >> $LOG
------------------
Como creo que se va a descuadrar, está descargable aquí:
http://www.vicius.org/publico/scriptecol.tar
El problema lo tenemos en "procesos". Como digo, habitualmente se lanza así:
crond -> bash
Pero cuando quiere, que es cuando falla, el script se lanza así:
crond -> bash -> bash
Y no tenemos ni idea de por qué.
Este es el log cuando va bien:
[20100405 08:42:01] -1 Inicia /usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh
[20100405 08:42:01] -2 Antes procesos ()...
/usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh
[20100405 08:42:01] -3 Se ejecuta /usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh
[20100405 08:42:01] -4 Finaliza /usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh
Este es cuando casca:
[20100405 08:40:01] -1 Inicia /usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh
[20100405 08:40:02] -2 Antes procesos (root 31305 31296 0 08:40 ?
00:00:00 /bin/bash /usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh)...
/usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh
[20100405 08:40:02] -4 Finaliza /usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh
Permisos del fichero:
-rwxr-xr-x 1 root root 737 mar 30 21:21 TEST_CLUSTER.sh
La opción de usar un fichero bandera al estilo de los scripts de init.d
no creo que nos sirva porque el nodo se puede reiniciar "porque sí"
(stonith) y el ficherillo se podría quedar sin borrar, dejándonos el
"invento" parado.
¿Qué leches se nos escapa? Llevamos usando ese método años en otras
distribuciones más antiguas sin problemas. ¿Se os ocurre otra idea mejor
de saber si algo está en ejecución?
Gracias y un saludo.
--
Seve.
EChMotor#486 BPD#6 Linux user#134969
306 XT HDI 2000-... Caleidoscopio Free
Canon EOS 400D + BG-E3 - S 17-70 - S 55-200 - C 100-400L IS - Helios-44M
RMC TK 24 F2.8 - Dryzone 200 - Toploader 70 AW - Canon Speedlite 430EX
seve < @ > vicius < . > org
Las FAQ de es.comp.hardware.misc en http://www.escomphardwaremisc.org
Re: Problema script bash en cron
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Mon, 05 Apr 2010 14:38
Date: Mon, 05 Apr 2010 14:38
14 lines
1533 bytes
1533 bytes
Hola Seve <invalid@lafirma.es> el Mon, 05 Apr 2010 09:05:16 +0200 escribiste: > Hola > > Necesito una ayudita :) > Añade la opción set -x al principio del script y prueba de nuevo. Obtendrás más info. -- Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> --- www.gpoc.es PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Re: Problema script bash en cron
Author: Pascal J. Bourguignon
Date: Mon, 05 Apr 2010 18:11
Date: Mon, 05 Apr 2010 18:11
35 lines
2709 bytes
2709 bytes
Seve <invalid@lafirma.es> writes:
> Hola
>
> Necesito una ayudita :)
>
> Queremos lanzar un script desde el cron en una Centos5. El script se
> llama cada minuto y aunque habitualmente termina en cuesti�n de
> segundos, hay veces que puede tardar varios minutos.
>
> Como no nos interesa que el script se ejecute dos veces, hacemos un ps
> y buscamos que no estuviera en ejecuci�n. El problema que tenemos es
> que cuando quiere da error porque el shell parece lanzarse dos veces y
> da un "falso positivo".
>
> Mosqueados, hemos hecho el sscript que pongo m�s abajo y lo hemos
> colgado en el cron. Lo que hace es ver si est� en el mismo nodo que en
> el que corre apache (es un cluster). Si es el mismo, saca la lista de
> procesos, busca su nombre, quita grep, se quita a s� mismo y si la
> lista est� vac�a, supone que no est� ya en ejecuci�n y hace lo que
> tenga que hacer (TEST_CRON.sh en este caso).
Tenemos el problema general en unix para saber si un programa dado esta
ejecutandose. En linux, se puede usar lockf(1):
--------------------(test-cluster)-------------------------------------
#!/bin/bash
exc flock -x -n "/var/lock/test-cluster/pid.lock" -c test-cluster-do-it
-----------------------------------------------------------------------
--
__Pascal Bourguignon__
Re: Problema script bash en cron
Author: Seve
Date: Mon, 05 Apr 2010 22:16
Date: Mon, 05 Apr 2010 22:16
27 lines
2339 bytes
2339 bytes
El 05/04/2010 20:11, Pascal J. Bourguignon escribió: > Seve<invalid@lafirma.es> writes: >> Como no nos interesa que el script se ejecute dos veces, hacemos un ps >> y buscamos que no estuviera en ejecución. El problema que tenemos es >> que cuando quiere da error porque el shell parece lanzarse dos veces y >> da un "falso positivo". > Tenemos el problema general en unix para saber si un programa dado esta > ejecutandose. En linux, se puede usar lockf(1): Ostras, no había caído en usar bloqueos sobre ficheros en lugar de ficheros bandera. Una idea estupenda. Mañana probamos :D Muchas gracias. -- Seve. EChMotor#486 BPD#6 Linux user#134969 306 XT HDI 2000-... Caleidoscopio Free Canon EOS 400D + BG-E3 - S 17-70 - S 55-200 - C 100-400L IS - Helios-44M RMC TK 24 F2.8 - Dryzone 200 - Toploader 70 AW - Canon Speedlite 430EX seve < @ > vicius < . > org Las FAQ de es.comp.hardware.misc en http://www.escomphardwaremisc.org
Re: Problema script bash en cron
Author: Seve
Date: Mon, 05 Apr 2010 22:17
Date: Mon, 05 Apr 2010 22:17
27 lines
2242 bytes
2242 bytes
El 05/04/2010 16:38, Gonzalo Pérez de Olaguer Córdoba escribió: > Hola Seve<invalid@lafirma.es> > el Mon, 05 Apr 2010 09:05:16 +0200 escribiste: > >> Hola >> >> Necesito una ayudita :) > Añade la opción set -x al principio del script y prueba > de nuevo. Obtendrás más info. Ok, mañana probamos a ver qué sale, porque es curioso que unas veces vaya y otras no y sobre todo que falle en las Centos 5 y no nos haya fallado en las otras máquinas más antiguas. -- Seve. EChMotor#486 BPD#6 Linux user#134969 306 XT HDI 2000-... Caleidoscopio Free Canon EOS 400D + BG-E3 - S 17-70 - S 55-200 - C 100-400L IS - Helios-44M RMC TK 24 F2.8 - Dryzone 200 - Toploader 70 AW - Canon Speedlite 430EX seve < @ > vicius < . > org Las FAQ de es.comp.hardware.misc en http://www.escomphardwaremisc.org
Re: Problema script bash en cron
Author: dx
Date: Tue, 06 Apr 2010 09:12
Date: Tue, 06 Apr 2010 09:12
7 lines
1437 bytes
1437 bytes
pjb@informatimago.com (Pascal J. Bourguignon) writes: > [...] > exc flock -x -n "/var/lock/test-cluster/pid.lock" -c test-cluster-do-it Vaya, no conocía sobre flock. Gracias. dx
Re: Problema script bash en cron
Author: jose maria
Date: Tue, 06 Apr 2010 16:19
Date: Tue, 06 Apr 2010 16:19
33 lines
2302 bytes
2302 bytes
Seve wrote: > Hola > > Necesito una ayudita :) > > Queremos lanzar un script desde el cron en una Centos5. El script se > llama cada minuto y aunque habitualmente termina en cuesti�n de > segundos, hay veces que puede tardar varios minutos. > > Como no nos interesa que el script se ejecute dos veces, hacemos un ps y > buscamos que no estuviera en ejecuci�n. El problema que tenemos es que > cuando quiere da error porque el shell parece lanzarse dos veces y da un > "falso positivo". > > Mosqueados, hemos hecho el sscript que pongo m�s abajo y lo hemos > colgado en el cron. Lo que hace es ver si est� en el mismo nodo que en > el que corre apache (es un cluster). Si es el mismo, saca la lista de > procesos, busca su nombre, quita grep, se quita a s� mismo y si la lista > est� vac�a, supone que no est� ya en ejecuci�n y hace lo que tenga que > hacer (TEST_CRON.sh en este caso). > > Entrada en cron: > * * * * * /usr/bin/hvs/cron/migrados/TEST_CLUSTER.sh # Test > > * Si tienes muchos y distintos, como es mi caso, en cron u otros front-ends, los lanzo como argumento con el del enlace, invitado invitado para acceder, me evita programarlo en los propios scripts, con la opcion de especificar un usuario o pararlos de forma ordenada, independientemente del script. https://doc.usernix.org:4443/index.php?module=fileview&objectId=7401
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads