Skocz do zawartości

Bash Większy Mniejszy Dylemat ;)


neo_fox

Rekomendowane odpowiedzi

Witam,

 

a więc mam taki skrypt:

 

#!/bin/bash
load=`uptime|awk '{print $12}'`
date=`date`
echo $date Load Avarage $load >> /var/log/httpd/lamonitor
if [ $load > 8 ]; then 
  echo $date Stopping httpd server due to high system load $load  >> /var/log/httpd/lamonitor
  service httpd stop
  service mysqld stop
  sleep 15
  service httpd start
  service mysqld start
  fi

 

I mam problem z tą częścią:

if [ $load > 8 ]

mnie chodzi o to by sprawdzić czy load average jest większe niż 8. Natomiast w ten sposób tworzy mi jedynie plik o nazwie 8 :lol:

Znaczy się w tym wypadku > to przekierowanie strumienia :lol:

 

Ale jak mam sprawdzić czy $load jest większe niż 8.

 

Pozdrawiam,

Radek

 

EDIT: Byków narobiłem a tytułu się zmienić nie da :lammer:

Odnośnik do komentarza
Udostępnij na innych stronach

if [ $load -gt 8 ]

ale to masz w bashu skrypt chyba a nie w perlu;)

 

by latwiej bylo zapamietac na przyszlosc :) masz z angielskiego:

-gt = greater then = wiekszy niz :)

-ge = greater or equal = wiekszy lub rowny :)

-lt = lesser then = mniejszy niz :)

-le = lesser or equal = mniejszy lub rowny :)

-eq = equal = rowny, jednakowy :)

Odnośnik do komentarza
Udostępnij na innych stronach

Heh w międzyczasie trochę pokombinowałem i wyczarowałem coś takiego:

 

#!/bin/bash
load=`uptime|awk '{print $10}'`
la=`echo $load | awk -F "." '{print $1}'`
lafull=`echo $load | awk -F "," '{print $1}'`
date=`date`
echo $date Load Avarage $lafull >> /var/log/httpd/lamonitor
if [ $la -gt 5 ]; then 
   echo $date Stopping httpd server due to high system load $load  >> /var/log/httpd/lamonitor
  service httpd stop
  service mysqld stop
   sleep 30
  service httpd start
  service mysqld start
fi

 

piękne dzięki za pomoc. :rolleyes:

Pokombinuje sobie jeszcze z podwójnymi nawiasami kwadratowymi bo co prawda w tym momencie wystarczy mi integer ale może będę kiedyś potrzebował liczby zmiennoprzecinkowej.

 

Dzięki wielkie za pomoc

Odnośnik do komentarza
Udostępnij na innych stronach

dało by się zrobić jeszcze taką pętle (while?) aby sprawdzić czy apache wystartował i jeśli nie to spróbować ponownie.

Nie jest pewien jak odpytać status

whille service httpd status = stoped ?? albo coś w tym stylu

 

EDIT: Dzięki za zmianę tytułu

Odnośnik do komentarza
Udostępnij na innych stronach

[root@localhost ~]# while [ `service acpid status |cut -f5 -d' '` == "uruchomiony..." ]; do echo "ok"; sleep 5; done 2>/dev/null
ok
ok

[root@localhost ~]# service acpid stop
Zatrzymywanie demona ACPI:                                 [  OK  ]
[root@localhost ~]# while [ `service acpid status |cut -f5 -d' '` == "uruchomiony..." ]; do echo "ok"; sleep 5; done 2>/dev/null
[root@localhost ~]#

Odnośnik do komentarza
Udostępnij na innych stronach

Kurcze a ja wykombinowałem coś takiego:

 

#!/bin/bash
load=`uptime|awk '{print $10}'`
la=`echo $load | awk -F "." '{print $1}'`
lafull=`echo $load | awk -F "," '{print $1}'`
date=`date`
if [[ $la > 5 ]]; then 
        echo $date Stopping Apache and MySQL server due to high system load [$lafull]  >> /var/log/httpd/lamonitor
        service httpd stop
        service mysqld stop
        statok="is running"
        sleep 60
        COUNTER=1
        while [  $COUNTER -lt 11 ]; do
                load=`uptime|awk '{print $10}'`
                la=`echo $load | awk -F "." '{print $1}'`
                lafull=`echo $load | awk -F "," '{print $1}'`
                echo $date [$COUNTER] - Starting Apache server [$lafull]  >> /var/log/httpd/lamonitor
                service httpd start
                load=`uptime|awk '{print $10}'`
                la=`echo $load | awk -F "." '{print $1}'`
                lafull=`echo $load | awk -F "," '{print $1}'`
                date=`date`
                apstas=`service httpd status`
                apstas=`echo $apstas | awk -F ")" '{print $2}'`
                apstas=`echo $apstas | awk -F "." '{print $1}'`
                if [ "$apstas" == "$statok" ]; then 
                        C=$COUNTER
                        COUNTER=11
                else
                        let COUNTER=COUNTER+1  
                fi
        done
        load=`uptime|awk '{print $10}'`
        la=`echo $load | awk -F "." '{print $1}'`
        lafull=`echo $load | awk -F "," '{print $1}'`
        date=`date`
        echo $date [$C] - Apache $apstas [$lafull]  >> /var/log/httpd/lamonitor
        COUNTER=1
        while [ $COUNTER -lt 11 ]; do
                load=`uptime|awk '{print $10}'`
                la=`echo $load | awk -F "." '{print $1}'`
                lafull=`echo $load | awk -F "," '{print $1}'`
                echo $date [$COUNTER] - Starting MySQL server [$lafull]  >> /var/log/httpd/lamonitor
                service mysqld start
                load=`uptime|awk '{print $10}'`
                la=`echo $load | awk -F "." '{print $1}'`
                lafull=`echo $load | awk -F "," '{print $1}'`
                date=`date`
                msstas=`service mysqld status`
                msstas=`echo $msstas | awk -F ")" '{print $2}'`
                msstas=`echo $msstas | awk -F "." '{print $1}'`
                if [ "$msstas" == "$statok" ]; then 
                        C=$COUNTER
                        COUNTER=11
                else
                        let COUNTER=COUNTER+1  
                fi
        done
        load=`uptime|awk '{print $10}'`
        la=`echo $load | awk -F "." '{print $1}'`
        lafull=`echo $load | awk -F "," '{print $1}'`
        date=`date`
        echo $date [$C] - MySQL $msstas [$lafull] >> /var/log/httpd/lamonitor  
else
        echo $date Load Avarage $lafull >> /var/log/httpd/lamonitor
fi

 

ale Twój kod zdaje się być sensowniejszy :rolleyes:

Popróbuję z nim.

Dzięki :D

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...