Strona 1 z 2

Skrypt do sprawdzania stanu procesorów

: 05 kwietnia 2009, 09:21
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?

: 05 kwietnia 2009, 10:50
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ż :-)

: 05 kwietnia 2009, 12:48
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ć?

: 05 kwietnia 2009, 13:18
autor: Rad
Popraw ścieżkę do Perla na tę, którą masz u siebie.

: 05 kwietnia 2009, 13:18
autor: lis6502

Kod: Zaznacz cały

ls -l /usr/bin/perl
which perl

: 05 kwietnia 2009, 13:19
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.

: 05 kwietnia 2009, 13:30
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).

: 05 kwietnia 2009, 14:05
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.

: 05 kwietnia 2009, 14:15
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.

: 05 kwietnia 2009, 14:40
autor: Hugo
Odpaliłem skrypt - nie działa