Skrypt do sprawdzania stanu procesorów

Konfiguracja serwerów, usług, itp.
Hugo
Posty: 11
Rejestracja: 09 lutego 2009, 20:00
Lokalizacja: Krosno

Skrypt do sprawdzania stanu procesorów

Post autor: Hugo »

Witam.
Potrzebuję skryptu, który sprawdzi stan procesów i usunie ten, który jest np. powyżej 35%.
Czyli wykona taką komendę:

Kod: Zaznacz cały

kill -9 PID
PID - proces serwera powyżej 35%

Najlepiej żeby skrypt sprawdzał zużycie cały czas.

Czy możecie mi pomóc?
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Są do tego napisane narzędzia, wystarczy poszukać. A i napisanie skryptu nie powinno być aż tak wielkim problemem - parę minut i już. Ale że mi się nudzi to Ci napisałem coś takiego:

Kod: Zaznacz cały

#!/usr/bin/perl

$limit = 35; #limit CPU w %
$logfile = '/var/log/proc_kill.log'; #sciezka do pliku kogu
$sleep = 5; #czas co jaki jest sprawdzany stan procesow

open (LOG, '>>', $logfile);
while (1){
        @proc = `ps aux`;
        foreach (@proc) {
                split(' ',$_);
                next if $_[0] =~ /USER/;
                if ($_[2] > $limit){
                        kill 9, $_[1];
                        $now = localtime(time);
                        print LOG "$now - PID :: $_[1], Owner :: $_[0], CPU :: $_[2]\n";
                }
        }
        sleep $sleep;
}
close LOG;
Odpalasz z & aby nie blokować terminala i już :-)
Hugo
Posty: 11
Rejestracja: 09 lutego 2009, 20:00
Lokalizacja: Krosno

Post autor: Hugo »

Wyskakuje mi taki błąd:

Kod: Zaznacz cały

host:~# ./procek.sh
-bash: ./procek.sh: /usr/bin/perl^M: bad interpreter: Nie ma takiego pliku ani katalogu
Przeglądałem FTP i nie ma takiego katalogu.

Perl jest zainstalowany.

Co zrobić?
Rad
Member
Posty: 1208
Rejestracja: 28 czerwca 2006, 15:05

Post autor: Rad »

Popraw ścieżkę do Perla na tę, którą masz u siebie.
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Kod: Zaznacz cały

ls -l /usr/bin/perl
which perl
Hugo
Posty: 11
Rejestracja: 09 lutego 2009, 20:00
Lokalizacja: Krosno

Post autor: Hugo »

Wyskakuje coś takiego:

Kod: Zaznacz cały

host:~# ls -l /usr/bin/perl
-rwxr-xr-x 2 root root 6856 sty  1 16:57 /usr/bin/perl
Ale mimo to dalej nie działa.

Co to może być?

[Dodano: 2009-04-05, 13:21]
Perl tam jest ale mimo to nie odpala skryptu.
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Nie dam sobie uciąć głowy, ale pewnie chodzi o kodowanie. Nie wnikając w szczegóły: na lokalnym komputerze odpal jakiś graficzny edytor tekstu ([gk]edit), do niego przeklej treść skryptu, zapisz i wyślil przez scp na docelową maszynę (zakładam że masz gdzieś wykupiony serwer).
Hugo
Posty: 11
Rejestracja: 09 lutego 2009, 20:00
Lokalizacja: Krosno

Post autor: Hugo »

Możesz jakoś jaśniej?

Szczerze wątpię, że o to chodzi bo na swoim komputerze wkleiłem do notatnika i zapisałem jako: procek.sh i skopiowałem poprzez Total Commander na serwer do folderu root.
Awatar użytkownika
lis6502
Member
Posty: 1798
Rejestracja: 05 listopada 2008, 20:14
Lokalizacja: Miasto Szybowców

Post autor: lis6502 »

Nie wiem jak jaśniej Ci to wytłumaczyć. DOS/Windows a Unix/Linux to dwa różne standardy kodowania znaków. W tym wypadku chodzi o koniec linii. O ile Unix zadowoli się samym LF, o tyle DOS kończy linię sekwencją CR+LF. Dlatego nie można znaleźć pliku /usr/bin/perl^M, ten ^M to właśnie nieszczęsny CR. Więcej info: http://www.brandonhutchinson.com/DOS_an ... cters.html
Solucja: zadzwoń na serwer przez putty i spróbuj czegoś takiego:

Kod: Zaznacz cały

sed 's/^M//' procek.sh > procek_u.sh
Znak wygenerujesz sekwencją klawiszy

Kod: Zaznacz cały

CTRL+V CTRL+M
Alternatywnie możesz poszukaj jakichś konwerterów tekstów z dos na unix dla windowsa.
Hugo
Posty: 11
Rejestracja: 09 lutego 2009, 20:00
Lokalizacja: Krosno

Post autor: Hugo »

Odpaliłem skrypt - nie działa
ODPOWIEDZ