Comprender la gran utilidad que tiene el ciclo for pare revisiones continuas y aprender algunos comandos de unix para monitoreo.

Comandos en unix: echo, read, ps -u, grep -v, awk, ciclo for, do-done, who -R, sleep.

En unix existe el comando "who" el cual te ayuda a encontrar que usuarios se encuentran logeados en el sistema operativo.
1.-who -R | grep sybase
sybase pts/tc Mar 26 07:40 (180.50.101.21)
sybase pts/tg Mar 25 09:37 (180.50.5.109)
Como bien observas, con el comando "who -R" el sistema operativo indica cual es la ip de la pc que se encuentra logeado dentro de él.
Ahora, si verificas que proceso esta ejecutando el usuario "sybase" puedes encontrar que existe un común denominador entre el comando anterior y el nuevo ejecutado en la siguiente línea:
2.- ps -u sybase | grep -v sh | grep -v grep | grep -v ps | grep -v "?"
PID TTY TIME COMMAND
3808 pts/tg 0:00 RUN_LAB
29337 pts/tc 0:00 isql
3864 pts/tg 0:00 isql
3809 pts/tg 0:08 dataserver
El común denominador es la terminal.

Si solo quieres que te muestre las terminales de la ejecución anterior se puede anexar a la línea no.2 el comando "awk" (podría también utilizarse "cut")
3.- $ps -u sybase | grep -v sh | grep -v grep | grep -v ps | grep -v "?" | awk '{ print $2 }'
TTY
pts/tg
pts/tc
pts/tg
pts/tg
pts/th

Si no deseas que en el resultado aparezca "TTY" entonces ejecuta el comando "grep -v":
ps -u sybase | grep -v sh | grep -v grep | grep -v ps | grep -v "?" | grep -v TTY | awk '{ print $2 }'

Si ligas la línea 1 y 3 se interpreta de la siguiente forma la búsqueda que estamos realizando:
PROCESOS DE SYBASE ( ps -u sybase | grep -v sh | grep -v grep | grep -v ps | grep -v "?" | awk '{ print $2 }') QUE CORRESPONDEN A CIERTAS IPS DE PCS (who -R | grep sybase)

Shell para encontrar la pc de acuerdo a la terminal del proceso en ejecución.
Copiarlo en un archivo del sistema operativo:
Se copian las líneas a memoria de la pc, después de generar el archivo con el comando "cat > archivo" como se muestra en negritas:
SHELL A:
hp580-d:/home/asegura/PRUEBAS_SHELL> cat > uno
echo "Indica usuario a checar ...."
read usuario
ps -u $usuario | grep -v sh | grep -v grep | grep -v ps | grep -v ? | grep -v TT
Y | awk '{ print $2 }' > procesos
for a in `cat procesos`
do
ip_de_a=`who -R | grep $a | awk '{ print $6 }'`
echo "Usuario: $usuario ; Terminal $a ; Hostname: $ip_de_a "
sleep 1
done
Se adecuan los permisos al nuevo archivo:
serv_desarrollo:/home/sybase/PRUEBAS_SHELL> chmod 700 uno
Se verifican los permisos del nuevo archivo:
serv_desarrollo:/home/sybase/PRUEBAS_SHELL> ls -rlt uno
-rwx------ 1 sybase users 325 Mar 15 09:41 uno
Se ejecuta el archivo:
serv_desarrollo:/home/sybase/PRUEBAS_SHELL> uno
Indica usuario a checar ....
sybase à indicar el nombre del usuario a monitorear
Indica usuario a checar ....
sybase
La salida que te genera es:
Usuario: sybase ; Terminal pts/tg ; Hostname: (180.50.5.109)
Usuario: sybase ; Terminal pts/tc ; Hostname: (180.50.101.21)
Usuario: sybase ; Terminal pts/tg ; Hostname: (180.50.5.109)
Usuario: sybase ; Terminal pts/tg ; Hostname: (180.50.5.109)

Ahora, si deseas que te indique también el proceso que se esta ejecutando, entonces se hace lo siguiente:
SHELL B:
echo "Indica usuario:"
read usuario
ps -u $usuario | grep -v sh | grep -v grep | grep -v ps | grep -v "?" | grep -v TTY | awk '{ print $2 }' > procesos
for a in `cat procesos`
do
t=`echo $a | awk '{ print $1 }'`
p=`ps -u $usuario | grep $t | grep -v sh | grep -v grep | grep -v ps | grep -v "?" | grep -v "TTY" | awk '{ print $4 }'`
ip_de_t=`who -R | grep $t | awk '{ print $6 }'`
echo "Usuario: $usuario Terminal: $t proceso: $p hostname: $ip_de_t "
sleep 1
done
rm procesos
Salida generada después de ejecutar el shell:
Indica usuario:
sybase
Usuario: sybase Terminal: pts/tg proceso: RUN_LAB isql dataserver hostname: (180.50.5.109)
Usuario: sybase Terminal: pts/tc proceso: isql hostname: (180.50.101.21)
Usuario: sybase Terminal: pts/tg proceso: RUN_LAB isql dataserver hostname: (180.50.5.109)


Significado de las líneas programadas en el hell B:
echo "Indica usuario:"
El comando echo es para mostrar algún mensaje.
read usuario
El comando read es para guardar valores de variables
ps -u $usuario | grep -v sh | grep -v grep | grep -v ps | grep -v "?" | grep -v TTY | awk '{ print $2 }' > procesos
ps -u $usuario= verifica los procesos del usuario $usuario
$usuario= valor que se guardó en la variable usuario, para mostrar el valor una vez indicado se tiene que anteponer de la palabra usuario el signo de pesos.
grep -v palabra= indica que en la búsqueda no debe tomar en cuenta la línea que contenga la palabra "palabra".
awk= comando de unix, su uso general es para dar formato, en este caso estamos indicando que muestre el campo 2 de toda la búsqueda que se está realizando.
> procesos= ser resguarda el resultado en un archivo llamado procesos

for a in `cat procesos`
do
Se crea en for para realizar la búsqueda de lo requerido de uno por uno
t=`echo $a | awk '{ print $1 }'`
Muestra el valor de "a" primer elemento del for y después obtiene el campo 1
p=`ps -u $usuario | grep $t | grep -v sh | grep -v grep | grep -v ps | grep -v "?" | grep -v "TTY" | awk '{ print $4 }'`
ip_de_t=`who -R | grep $t | awk '{ print $6 }'`
echo "Usuario: $usuario Terminal: $t proceso: $p hostname: $ip_de_t "
sleep 1
done
Finaliza el ciclo for.
rm procesos

Espero que sea de gran utilidad la creación de este tipo de shell's para el monitoreo de usuarios que se encuentran conectados en tus aplicaciones.

Nos vemos pronto en el próximo script !!!!!

You are not authorised to post comments.

Comments powered by CComment

DBASupport - Foro

Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos
Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...
URGE AYUDA
  • Topic started by
  • in General
  • 15 years ago.
  • 15 years ago.
  • 30 replies
HOLA ESPERO ME PUEDAN AYUDAR. TEN GO UNA TABLA CON una estructura similar a la siguiente: id_mov cargo subtotal total...

Duada de Memoria de SQL Server 2005
  • Topic started by Erzengel
  • in General
  • 11 years ago.
  • 11 years ago.
  • 30 replies
Buen Día Recurro nuevamente a su sabiduría. Quiero saber el porque tiene un tope SQL Serever de 2GB en Windows server 2003 de 32 bit y si alguien...

SqlDateTime overflow
  • Topic started by
  • in General
  • 15 years ago.
  • 15 years ago.
  • 11 replies
Alguno de ustedes ha tenido este problema: SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.' Les...

problemas para iniciar el agente sql
  • Topic started by acgch
  • in General
  • 14 years ago.
  • 14 years ago.
  • 11 replies
Recientemente para asegurar el sql server 2005, cree una cuenta sql con derechos de sysadmin y borre el grupo BUILTIN\Administradores para evitar...

Problemas para levantar mirror
  • Topic started by acgch
  • in General
  • 14 years ago.
  • 14 years ago.
  • 16 replies
Hola amigos, tengan un buen día, les comento que estoy configurando mirror siguiendo los pasos a través del wizard del managment studio y también...
Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...

Estadisticas en la base de datos
Buenos días, estoy teniendo problemas de performance en mis queries y quisiera saber como puedo validar que mis tablas tienen las estadisticas...
Deshabilitar todos los jobs
  • Topic started by agamez
  • in Jobs
  • 3 years ago.
  • 3 years ago.
  • 1 reply
Buenos días, alguien sabe como puedo deshabilitar rapidamente todos los jobs de SQL Server, gracias.

Mirroring con estados disconnected
Hola, el día de hoy después de reiniciar mi servidor de destino a donde realizo el mirroring ya no pude replicar más, el error que muestra es que...

Se me duplica el mensaje en /etc/motd
  • Topic started by agamez
  • in General
  • 3 years ago.
  • 3 years ago.
  • 2 replies
Buen día, alguien tiene idea porque después de actualizar a fedora 28 se me esta duplicando la salida de mi /etc/motd?

Cómo puedo filtrar un mensaje en el log messages
Buenos días, estoy recibiendo en mi log de errores muchos mensajes de cron, ya que tengo varios crones configurados en mi server. Existe alguna...

Cómo validar la hora de ejecución de un proceso
Hola, estoy tratando de validar que un proceso sólo pueda ser ejecutado dentro de un periodo de tiempo, en este caso entre las 7:00 AM y las 7:00...