Monitor de usuarios
Publicado por Carlos Carvalho 14/07/2004
[ Hits: 7.538 ]
Esse script foi feito por mim ja a bastante tempo, ele monitora determinado usuario e seus processos por consumo de CPU, interessante tambem que uso nesse caso ARRAYS, o que eh
um pouco incomum em shell (pelo menos nao vi nenhum script que faca uso de arrays e matrizes por ai, se tiver algum quero ver tambem) . Esta parte esta comentada no codigo, explicando como eh e como funciona.
Hoje eu faria esse script bem mais simplificado e objetivo, mas haja paciencia :)
#!/bin/bash ############################################# ############################################# ############################################# # Monitor_Usuarios.sh # Script que verifica quantidade de # usuarios no sistema e processos # de maior consumo de cpu. # # # Tue Jul 8 11:43:44 BRT 2003 # # Carlos_lnx@ibest.com.br # ############################################## ############################################## ############################################## funcao () { user="info15" CACHE_KILL="/tmp/killcache.txt" MAXIMO=2 N_MAXIMO=2 N_ATUAL=$(ps -u $user --no-heading |awk '{print $1}' |wc -l) a=(y=$(ps aux --no-heading |grep $user |awk '{print $2}')) b=(z=$(ps aux --no-heading |grep $user |awk '{print $3}' |cut -d "." -f1)) #Aqui temos um exemplo de uso de arrays em Shell, para quem nunca viu... # $b1 recebe a array b[0] que eh a sequencia de uso de cpu via ps aux. O mesmo # acontece com $a1, entao eh verificado o valor de cada item do arrey. b1="${b[@]}" ; b2=$(echo $b1 |cut -d "=" -f2) a1="${a[@]}" ; a2=$(echo $a1 |cut -d "=" -f2) contador=0 for x in $b2 ; do if [ $x -ge $MAXIMO ] ; then echo echo "$user tem processo ocupando $x de cpu" echo "PID = ${a[$contador]}" echo "Devo matar este processo? [s/n]" read die if [ "$die" = "s" ] ; then #Aqui vai entrar a alteracao CACHE: echo "^%CD" > $CACHE_KILL echo "%SYS" >> $CACHE_KILL echo "^RESJOB" >> $CACHE_KILL echo "${a[$contador]}" >> $CACHE_KILL echo " " >> $CACHE_KILL echo "H" >> $CACHE_KILL echo " " >> $CACHE_KILL cache < $CACHE_KILL if [ $? = 0 ] ; then echo "PID ${a[$contador]} killada" fi fi echo fi contador=$(expr $contador + 1) done if [ $N_ATUAL -ge $N_MAXIMO ] ; then echo "%%%%%%%%%%%%%%%%%%%%%% AVISO %%%%%%%%%%%%%%%%%%%%%% Existem $N_ATUAL processos pertencentes a $user ! ultrapassando o limite de $N_MAXIMO por usuario %%%%%%%%%%%%%%%%%%%%%% AVISO %%%%%%%%%%%%%%%%%%%%%%" fi } funcao 2> /dev/null
OH MY ALIAS - Crie seu alias facilmente
Mantendo hora do servidor atualizada com NTP
Apagar arquivos recursivamente de um diretório pela extensão
Atenção a quem posta conteúdo de dicas, scripts e tal (2)
Manutenção de sistemas Linux Debian e derivados com apt-get, apt, aptitude e dpkg
Melhorando o tempo de boot do Fedora e outras distribuições
Como instalar as extensões Dash To Dock e Hide Top Bar no Gnome 45/46
Como Atualizar Fedora 39 para 40
Instalar Google Chrome no Debian e derivados
Consertando o erro do Sushi e Wayland no Opensuse Leap 15
Instalar a última versão do PostgreSQL no Lunix mantendo atualizado
Flathub na sua distribuição Linux e comandos básicos de gerenciamento
ASRock H310CM-HG4 vs Linux [RESOLVIDO] (18)
Microfone do meu headset não é recinhecido. Meu notebook é um Acer Asp... (12)