O problema é que tp=(...
define uma matriz, mas $tp
referencia apenas o primeiro elemento da matriz.
Você precisa
for i in "${tp[@]}" ; do
Tenho andado a brincar com scripts ultimamente. Escrevi este com a ajuda do @Cas
#!/bin/bash
## Variables ##
host="'/bin/hostname'";
## Limits ##
OneMin="1";
FiveMin="6";
FifteenMin="6";
## Mail IDs ##
To="[email protected], [email protected]";
Fr="root@"$host;
## Load Averages ##
LA=('uptime | grep -Eo '[0-9]+\.[0-9]+' | cut -d"." -f1')
## Top Process List ##
tp=('ps -ef | sort -nrk 3,3 | grep -E "(php|httpd)" | grep -v root | head -n30 | awk '{print $2}'')
## Actions ##
if [ ${LA[0]} -ge $OneMin ]; then
## Send Mail ##
echo -e "From: $Fr
To: $To
Subject: *ALERT* - Current Load on '$host' Is High
Load Averages Are: \n\n
1:Min\t5:Min\t15:Min \n
${LA[0]}\t${LA[1]}\t${LA[2]} \n\n
List Of Processes That Were Killed \n" | sendmail -t
## Kill Top Pocesses ##
for i in $tp ; do
kill -9 $i
done
fi
Eu não tenho certeza se esse array funciona, especialmente a última parte, onde eu adicionei um loop para matar os principais processos .. porque ele não imprime lista de processos nesse email. Eu não tenho idéia do porquê. Mas o script não dá nenhum erro ..
OK ## WORKAROUND ##
Por falar nisso, isso funcionaria?
#!/bin/bash
## Variables ##
host="'/bin/hostname'";
## Limits ##
OneMin="7";
FiveMin="6";
FifteenMin="6";
## Load Averages ##
LA=('uptime | grep -Eo '[0-9]+\.[0-9]+' | cut -d"." -f1')
## Actions ##
## One Minut Action ##
if [ ${LA[0]} -ge $OneMin ]; then
## Send Mail ##
echo -e "From: $Fr
To: $To
Subject: *ALERT* - Current Load on '$host' Is High
Load Averages Are: \n\n
1:Min\t5:Min\t15:Min \n
${LA[0]}\t${LA[1]}\t${LA[2]} \n\n
List Of Processes That Were Killed \n
'ps -ef | sort -nrk 3,3 | grep -E "(php|httpd)" | grep -v root | head -n30 | awk '{print $2}''" | sendmail -t
## Kill Top Pocesses ##
for i in 'ps -ef | sort -nrk 3,3 | grep -E "(php|httpd)" | grep -v root | head -n30 | awk '{print $2}'' ; do
kill -9 $i
done
fi
Quero dizer, isso mataria todos os PiDs?
Tags bash shell-script