domingo, 30 de marzo de 2014

Manejo basico de jobs en linux/solaris

Saludos apoco no les ha pasado que quieren ejecutar un shell en segundo plano y resula que ya lo lanzaron o por ejemplo despliega muchas letras engorrosas en la terminal y demas cosillas que a los principiantes sysadmins o noobsters nos llega a suceder, bueno aqui un pequeño tutorial.

es comun ejecutar scripts en bash y pearl en la terminal Linux para eso nos ayudamos de ./nombredelscript.sh o pl etc...
pero que pasa cuando lo queremos mandar a segundo plano, basicamente disponemos de 2 opciones

./nombredetushell. & 

colocar al final el simbolo de " & " manda a segundo plano el comando o script que se desea ejecutar
si queremos evitar que nos lance letras o la salida del comando en la terminal podemos agregar:

nohup ./nombredetushell &

con esto ya no veremos salida en la termina y se ira a segundo plano, pero que pasa cuando queremos ver si sigue en ejecución por que este aun no termina.

podemos usar el comando jobs y con este comando seremos capaz de visualizar una lista de los jobs que se estan ejecutando con un numerito [num] que indica la prioridad con la que se ejecuta el job

[1]   running                 /opt/apache/test.sh
[2]+  running                /tmp/shell2.sh > /dev/null


ahora bien supongamos que lo queremos traer a primer plano podemos dar el comando fg para regresar un comando que enviamos a segundo plano a primer plano, de igual forma para enviar el comando nuevamente a segundo plano o bien cualquier otro comando que este en ejecución en primer plano podemos ejecutar ctrl+z para detenerlo y luego el comando bg, al mandarlo a segundo plano en algunas versiones de linux nos regresa el numero de job y el PID vemos un ejemplo:

digamos que yo arranco un shell para ordenar mis mp3 llamado mp3sort.sh

y lo lanzo con ./mp3sort.sh hasta este punto lanzamos la ejecucion pero como tenemos mas cosas que hacer en la terminal y nos es una prioridad, lo mandamos a segundo plano ejecutamos ctrl+z para detenerlo y luego el comando bg .

[2] 2136   

jobs

[1]  done                     ./e.sh
[2]  running                ./mp3sort.sh

Mas tarde nos acordamos que dejamos un shell corriendo y queremos ver en que estatus quedo entonces tecleamos el comando jobs

[1]  running                ./mp3sort.sh


y vemos que sigue en ejecución, entonces nos damos cuenta de que ya lleva mucho tiempo y no funciona o estaba en prueba, entonces lo queremos matar aqui hay de 2 le damos un kill -9 y el pid
en este caso kill -9 2136 para matar el job o bien kill %1 que es el número de job.

entonces ya disponemos de varias opciones para iniciar el job y mandarlo a segundo plano desde un inicio o bien detenerlo y mandarlo a background mode (segundo plano)

haber ahi les va un ejemplo mas complicado


<<<<<<<<<<<<< Matar varios procesos y tareas especificas >>>>>>>>>>>>>>>
ps -fea |grep root| egrep -v "license|samba" | awk '{print $2}' | xargs -I {} kill -9 {}

vamos a desglozar el comando de mas arriba, recuerda que  " | " es una tuberia y redirige la salida del primer comando al seguiente, quiza no es el modo mas elegante de hacerlo, pero es un buen ejemplo de tuberias ;-), vamos!!
sacamos todos los procesos (ps -fea), depuramos con grep al usuario root y con egrep buscamos las palabras que contengan smbd y samba, con awk solo dejamos el PID del proceso, con xargs cachamos la lista  de procesos y la ponemos en un array{} y a todos esos PID les damos un kill -9 {}
las llaves es para indicar el array :-)

algo mas elegante es utilizar el comando pgrep -u myusuario o bien el pkill -u myusuario, tanto pgrep como pkill tienen varias opciones mas para buscar procesos o matarlos.

a la espera de sus comentarios y espero les sirva.




No hay comentarios.:

Publicar un comentario