neo_fox Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 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 Znaczy się w tym wypadku > to przekierowanie strumienia 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 More sharing options...
faja Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 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 More sharing options...
neo_fox Napisano Marzec 4, 2008 Autor Zgłoszenie Share Napisano Marzec 4, 2008 Ehhh kurka. Oczywiście że w bashu :lammer: :lammer: :lammer: Taki problem: ./Lamonitor: line 5: [: 0.58: integer expression expected Chyba musiałbym jakoś string to float ... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
faja Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 a da sie w bashu zmiennoprzecinkowe liczby stosowac? bo ja nie wiem;/ ..wszedzie jak szukalem to tylko integer;/ Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
ecik__ Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 if [ $load > 8 ]; then Zmień na: if [[ $load > 8 ]]; then Powinno działać. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
faja Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 @ecik__ a da sie na zmiennoprzecinkowych dzialac? jakies operacjie itp. Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
ecik__ Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 @ecik__ a da sie na zmiennoprzecinkowych dzialac? jakies operacjie itp. [ecik@ecik /etc/mock]$ [[ 0.6 > 0.4 ]] && echo Prawda Prawda [ecik@ecik /etc/mock]$ [[ 0.3 > 0.4 ]] && echo Prawda [ecik@ecik /etc/mock]$ Wygląda na to, że tak Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
faja Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 test tak, dziala, tez sprawdzalem:) ale dodawania dzielenia i takie tam? Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
jjj Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 Panowie, czytać manuale i bez kozactwa. Pamiętajcie o typach danych. Sprawdźcie 10 > 2 PS. echo $((1+2+3 < 10 )) Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
neo_fox Napisano Marzec 4, 2008 Autor Zgłoszenie Share Napisano Marzec 4, 2008 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. 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 More sharing options...
ecik__ Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 Panowie, czytać manuale i bez kozactwa. Pamiętajcie o typach danych. Sprawdźcie 10 > 2. Hm, racja. Jednak nie ma obsługi liczb zmiennoprzecinkowych Czasem to się już przestaje myśleć... Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
faja Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 no nie ma:) Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
neo_fox Napisano Marzec 4, 2008 Autor Zgłoszenie Share Napisano Marzec 4, 2008 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 More sharing options...
Adi1981 Napisano Marzec 4, 2008 Zgłoszenie Share Napisano Marzec 4, 2008 [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 More sharing options...
neo_fox Napisano Marzec 4, 2008 Autor Zgłoszenie Share Napisano Marzec 4, 2008 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 Popróbuję z nim. Dzięki Odnośnik do komentarza Udostępnij na innych stronach More sharing options...
Rekomendowane odpowiedzi
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ę