Bash: processo de matar em função da memória usada

1

Eu fiz esse script para fechar um processo, mas não posso comparar o resultado awk ( var1 ) com um Integer: var1 -gt 5000 .

Meu script:

#!/bin/bash

var1= free -m |awk 'NR == 2'| awk '{print $3}'
var2= ps aux | grep '/opt/skype/skype' | grep -v grep | awk '{print $2}'

while true;
do
     if [ $var1 -gt 5000 ]; then
         echo "La memoria se ha excedido cerrando porcesos"
         kill -9 $var2
     break
     else
     echo "La memoria aun es estable $var1"
     fi
done

Poderia ser um problema de transmissão no bash?

    
por ymk369 21.08.2015 / 03:20

2 respostas

3

Você pode converter variáveis em bash e ksh (use declare -i var ou typeset -i var para o interger), mas não acho que isso seja problema seu.

O seguinte irá definir var1 para nada enquanto estiver executando o comando normalmente.

var1= free -m |awk 'NR == 2'| awk '{print $3}'

Se você quiser que a saída de free e awk seja configurada para var1, o acima deve ser:

var1=$( free -m |awk 'NR == 2'| awk '{print $3}' )
    
por 21.08.2015 / 03:27
1

obrigado DarkHeart, meu roteiro funciona.

Aqui está o código resultante:

#!/bin/bash

while true; do   

    var1=$( free -m |awk 'NR == 2'| awk '{print $3}' )
    var2=$( ps aux | grep '/opt/skype/skype' | grep -v grep | awk '{print $2}' )

    if [ $var1 -gt 5460 ]; then
         echo "La memoria se ha excedido cerrando porcesos"
         kill -9 $var2
         break
    else
         echo "La memoria aun es estable $var1"
    fi

    sleep 1

done
    
por 21.08.2015 / 04:25