• Publicidad

script para terminar procesos

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

script para terminar procesos

Notapor fgalves » 2006-10-27 09:46 @448

Hola a todos,

Ya vuelvo a estar aqui para daros la tabarra como siempre.

En este caso tengo que desarrollar un script que haga lo siguiente:


1. Crear fichero "flag file" que servira para informar a ciertas aplicaciones que no deben ejecutarse. Dichas aplicaciones lo primero que hacen es comprobar la existencia de dicho fichero.

2 Mientras (hay proceso/s correspondiente/s a dichas aplicaciones en ejecucion)
{
}

3. Quit


El caso es que tengo algunas dudas:
1. Vale la pena hacer un script en perl para eso, o es mas apropiado un shell script?
2. Como guardo los procesos que corren actualmente en un array? (Dato importante: me refiero unicamente a los procesos correspondientes a las aplicaciones que quiero que paren)
Algo asi como:
@running_process = 'ps | grep /Nombre aplicacion/''; ?


Muchas gracias de antemano por vuestros consejos,
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Publicidad

Notapor explorer » 2006-10-27 10:16 @469

Yo lo hacía con Perl, en un cron. Miraba la lista de procesos actuales y guarda esa lista en el propio fichero.

Luego, en los scripts, se hacía la comprobación que mencionas, con un detalle: Si el fichero existía, se podía comenzar toda la cadena de producción. En cambio, si un proceso no tenía que ejecutarse más de dos veces seguidas, lo miraba diréctamente con un 'ps'.

Y en cuanto a la forma de obtener la lista, puedes hacerlo como dices o usando el grep del propio Perl.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fgalves » 2006-10-27 10:31 @480

Hola Explorer,

Gracias por la respuesta.
Pero no acabo de entender pq meter el script en la cron table.
Se trata de un script que quiero lanzar eventualmente para estar seguro que hay ciertos scripts perl que ya no estan siendo ejecutados ( y que no lo seran en un futuro debido a la existencia del fichero).
No termino de entender tu propuesta.

Gracias!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2006-10-27 10:52 @494

Es que la solución que yo necesitaba era que no podías fiarte de la existencia de un proceso que estuviera ejecutándose todo el tiempo, vigilando a los otros procesos, porque, ¿qué pasaba si se moría el vigilante? Pues entonces lo mejor es que se ejecutara de forma periódica.

En tu caso, es distinto. Quieres informar a otros procesos de que terminen. Una forma brusca es matándolos con kill, pero claro, es demasiado brusca. Y depende de como se lo tomen ellos (si son capaces o no de reconocer las señales kill que le envías). De una más suave es como lo que comentas, pero entonces dependes de lo que tarden las tareas en darse cuenta de la existencia de ese fichero.

En entornos Unix, lo normal es usar señales tipo kill USR1 para informar a otros procesos de algo 'anormal'. El proceso que lo recibe puede hacer un 'reload' de su fichero de configuración (que es lo normal, como en el caso de sendmail), por ejemplo) o cualquier otra tarea (morirse, por ejemplo, de forma educada: cerrando ficheros y demás).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fgalves » 2006-10-27 13:53 @620

¡Hola Explorer!

Como de costumbre, ¡¡gracias por contestar tan rápidamente!! Ya me has sacado de muchos apuros así que en primer lugar agradecer el que compartas toda tu sabiduría "Perlera" con los iniciados como yo.

En tu última respuesta a mi problema, dices que quiero informar a otros procesos de que terminen. De hecho, eso no es del todo cierto, así que antes quizás no he sido todo lo claro que debiera. Lo que yo pretendo, en el peor de los casos, es esperar a que terminen, pero nunca matarlos con un kill.

Dichos procesos (estamos hablando de 5 scripts Perl en total) pueden tardar incluso horas en terminar. Con ello, entiendo perfectamente lo que antes comentaste sobre el riesgo de que el "vigilante" (script metido en el bucle de espera), termine de forma inesperada.

Pero yo parto de la hipótesis que el que lanza el script sabe que no hay proceso alguno ejecutándose, o si los hubiera, que les queda unos minutos o segundos para terminar.

Otra duda que tengo es la siguiente, pues también soy novato en UNIX y te agradecería cualquier comentario al respeto:
Los 5 scripts Perl a los que mi script debe esperar, todos tienen una parte común al principio de sus nombres (en este caso, Colorao, por poner un ejemplo):
ColoraoPepito.pl
ColoraoFrijolito.pl
ColoraoManolito.pl
ColoraoAmparo.pl
ColoraoAnarosa.pl

Cuando haga un "ps" para obtener la lista de procesos que corren, ¿cómo los identificaré? ¿por su nombre? ¿Debo llamar a "ps" con algun parámetro especial para obtener lo que busco?

¡¡Gracias de antemano!!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2006-10-27 19:00 @833

Consultando la página de manual de ps (man ps) tendrás toda la información. Como regla general, yo uso "ps aux" que muestra todos los procesos posibles en formato largo. Luego, es cuestión de hacer una expresión regular para sacar los procesos que me interesan.

En cuanto a lo del fichero, si se trata sólo de informar a otros procesos con su mera existencia, valdría con crearlo y borrarlo más tarde:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ touch fichero_flag
$ ls
fichero_flag
$ rm fichero_flag
$ ls
$
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Con un sistema de alias en shell te podría servir:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ alias Parar="touch /tmp/fichero_flag"
$ alias Seguir="rm /tmp/fichero_flag"
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Así, el operador sólo tendrá que ejecutar los nuevos comandos Parar y Seguir.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fgalves » 2006-10-30 03:04 @170

¡¡¡Hola Explorer y todos en general!!!

De hecho, el "ps aux" no funciona en la versión de Unix con la cual trabajo (Sun Solaris).

He hecho un "man ps" y las dos opciones que me parecen mas interesantes son:

-a : Lists information about all processes most frequently requested: all those except session leaders and processes not associated with a terminal.

-d : Lists information about all processes except session leaders.

-e : Lists information about every process now running.


Supongo que la opción -a parece la mas lógica ya que los procesos asociados con los Perl script están asociados a un terminal.
Bueno, voy a probarlo y os tengo al corriente.
¡¡Gracias por la ayuda y un cordial saludo desde la France!!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 20 invitados