Ajuda com script

1. Ajuda com script

Fabio
farbus

(usa Linux Mint)

Enviado em 14/02/2015 - 15:18h

Alguém pode me dar uma forcinha na criação de um script simples?

É o seguinte, eu tenho um processo rodando, mas gostaria que esse script checasse o uso de memória desse processo (via crontab) cada vez que ele fosse chamado, e o matasse caso a quantidade de memória usada por esse processo esteja abaixo de um determinado valor.

Ilustrando melhor,
o processo se chama openjkded.i386 e gostaria que o script o matasse sempre quando o uso de memória dele fosse inferior a 50mb, a cada checagem que ele fizesse e identificasse essa condição.





  


2. Re: Ajuda com script

Perfil removido
removido

(usa Nenhuma)

Enviado em 14/02/2015 - 20:12h

farbus escreveu:

Alguém pode me dar uma forcinha na criação de um script simples?

É o seguinte, eu tenho um processo rodando, mas gostaria que esse script checasse o uso de memória desse processo (via crontab) cada vez que ele fosse chamado, e o matasse caso a quantidade de memória usada por esse processo esteja abaixo de um determinado valor.

Ilustrando melhor,
o processo se chama openjkded.i386 e gostaria que o script o matasse sempre quando o uso de memória dele fosse inferior a 50mb, a cada checagem que ele fizesse e identificasse essa condição.



Comece por partes. Crie um procedimento/comando para calcular a quantidade de memória que o processo está consumindo, esta será a parte mais complexa e você precisará definir se valores como os do comando ps são válidos para o seu cenário. Feito isto, o resto consiste apenas de testes simples.



3. Re: Ajuda com script

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 16/02/2015 - 15:54h

Segue o script abaixo que fiz para matar o chrome caso o mesmo atinja uso de memória menor que 50MB. Aí você adapta de acordo com a sua realidade.



#!/bin/bash



qtd_mem_proc=$(ps -ux | grep chrome | cut -d ' ' -f8 | head -n1 | grep [0-9].[0-9])

# Quantidade total de memória que tem o computador

total_mem=$(free -m | grep -i mem | cut -c15-18)



calculo=$(echo "scale=1;($total_mem*$qtd_mem_proc)/100" | bc -l)

# Esse cálculo é para ser usado no if, pois, este não aceita com casas decimais
calculo2=$(echo "scale=1;($total_mem*$qtd_mem_proc)/100" | bc -l | cut -c1-3)

if [ $calculo2 -lt 50 ]; then
echo "Memória muito alta"
killall -9 chrome
else
echo "Memória baixa"
fi




Depois é só você agendar no cron a execução diária do script. Espero ter ajudado.
_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782



4. Re: Ajuda com script

Fabio
farbus

(usa Linux Mint)

Enviado em 16/02/2015 - 21:24h


Poxa muito obrigado!


Vou testar, mas é exatamente isso que tava precisando!


5. Re: Ajuda com script

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 17/02/2015 - 10:54h

Escrevi tão rápido o script, pois ia sair, que não deu para fazer os devidos comentários. Mas com o comando ps, tem a coluna do uso da memória em porcentagem. Daí eu fiz um cálculo para saber o uso real da memória RAM em MB do aplicativo. Qualquer dúvida, é só postar.

_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782



6. Re: Ajuda com script

Perfil removido
removido

(usa Nenhuma)

Enviado em 17/02/2015 - 12:53h

k666 escreveu:

Segue o script abaixo que fiz para matar o chrome caso o mesmo atinja uso de memória menor que 50MB. Aí você adapta de acordo com a sua realidade.



#!/bin/bash



qtd_mem_proc=$(ps -ux | grep chrome | cut -d ' ' -f8 | head -n1 | grep [0-9].[0-9])

# Quantidade total de memória que tem o computador

total_mem=$(free -m | grep -i mem | cut -c15-18)



calculo=$(echo "scale=1;($total_mem*$qtd_mem_proc)/100" | bc -l)

# Esse cálculo é para ser usado no if, pois, este não aceita com casas decimais
calculo2=$(echo "scale=1;($total_mem*$qtd_mem_proc)/100" | bc -l | cut -c1-3)

if [ $calculo2 -lt 50 ]; then
echo "Memória muito alta"
killall -9 chrome
else
echo "Memória baixa"
fi




Depois é só você agendar no cron a execução diária do script. Espero ter ajudado.
_________________________
Wagner F. de Souza
Graduado em Redes de Computadores
"GNU/Linux for human beings."
LPI ID: LPI000297782



Usando o ps como base, é possível resumir para:


pid=$(pidof $process_name)
memory=$(ps --no-headers -p $pid -o size)
let 'memory /= 1024'
if (( memory < min )); then
echo menor
kill $pid
else
echo maior
fi



7. Re: Ajuda com script

Fabio
farbus

(usa Linux Mint)

Enviado em 08/03/2015 - 03:30h


Pessoal, obrigado pelas dicas.

Com a idéias de vocês e pesquisando pela net, fiz este abaixo:


#!/bin/bash
aux=$(pmap `pgrep openjkded.i386` | grep total | awk '{print $2}' | awk '{s+=$1}END{print s}')
aux2=$(pmap `pgrep linuxjampded2` | grep total | awk '{print $2}' | awk '{s+=$1}END{print s}')
if [ "$aux" -le "100000" ]
then
killall -9 openjkded.i386
else
echo "Server 01 OK"
fi
if [ "$aux2" -le "60000" ]
then
killall -9 linuxjampded2
else
echo "Server 02 OK"
fi


Nos meus testes ta funcionando.
Sempre quando algum dos servers fica com uso de memoria abaixo desse limite, o processo dele é finalizado.

Obrigado!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts