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ę:
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
: 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:
Znak
wygenerujesz sekwencją klawiszy
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