quarta-feira, 20 de fevereiro de 2008

script matador

Habitualmente ao usar telnet ou ssh, quando o usuário não efetua um loggof correto, devido principalmente a travamentos de máquinas, erros de rede, ou mesmo fechar sessão de forma forçada, ocorre de ficar com o processo preso referente aquela sessão aberta. Mesmo que a conexão já tenha sido fechada, o processo vira um zumbi.
Imaginemos isso ocorrer diariamente numa rede com mais de 200 usuários. Ligando sem parar reclamando que não consegue abrir tela do sistema, que precisa vender, bater meta etc....

Ao deparar com esse inferno na terra, corri atrás de uma solução para facilitar o trabalho de suporte. Criei um script que basta executar para derrubar, ou mesmo matar os processos de determinado usuário.

O nome do script é bem sugestivo: assassino
Pois, ao executar e inserir o nome do usuário, ele não deixa nada, mata tudo.

Claro que no linux/unix, pode-se fazer qualquer coisa em pelo menos duas formas diferentes. Então pode surgir alguem dizendo.. "ahh, eu faço isso e aquilo e funciona.". Parabéns!!! Esse é o espirito open source, pesquisar/aprender/testar/comemorar.

Segue abaixo o script:

#!/bin/bash
count=0
var=1

sudo touch /tmp/proc1.cont
sudo chmod 777 /tmp/proc1.cont
sudo touch /tmp/proc.cont
sudo chmod 777 /tmp/proc.cont

echo digite nome pra matar
read nome

sudo fuser -v /bin/bash | grep $nome | grep '/bin/bash' | awk '{ print $3 }' | egrep '[0-9]' > /tmp/proc.cont
sudo fuser -v /bin/bash | grep $nome | awk '{ print $2 }' | egrep '[0-9]' >> /tmp/proc.cont

count=$(wc -l /tmp/proc.cont | awk '{ print $1 }')
echo $count processos encontrados para matar

if [ $count -gt "0" ]; then

while [ $var != 0 ]; do

echo matando processo: $(head -1 /tmp/proc.cont)
sudo kill -9 $(head -1 /tmp/proc.cont)
sed '1d' /tmp/proc.cont > /tmp/proc1.cont
cat /tmp/proc1.cont > /tmp/proc.cont
count=$(expr $count - 1)

if [ $count -eq "0" ]; then
var=0
fi
done
fi